Hallo. Dies ist @tfujitani, ein Hang-Nerd. Dieses Mal habe ich Python erstellt, mit dem das Bild des Blogs des angegebenen Mitglieds von Nogisaka 46 vollautomatisch gespeichert werden kann, sodass ich es veröffentlichen werde. Der Grund, warum ich mich für dieses Programm "Trigger" entschieden habe, ist übrigens, dass Sayuri Inoue, der ein guter Kandidat war, seinen Abschluss gemacht hat. (Es ist ein gutes Lied, nicht wahr?) Das zu diesem Zweck erstellte Programm wird jetzt veröffentlicht.
・ Python ・ Schöne Suppe
pip install requests
pip install beautifulsoup4
Ich kratzte mit Beautiful Soup und Python3. Geben Sie dieses Mal die Blog-URL des Mitglieds an, das Sie angeben möchten. Für Manatsu Akimoto (http://blog.nogizaka46.com/manatsu.akimoto/) "manatsu.akimoto" Rika Ito (http://blog.nogizaka46.com/riria.itou/) ist wie "riria.itou". Sie können auch den Start- und Endpunkt des Zeitraums angeben, den Sie speichern möchten.
nogiblog.py
# coding:utf-8
from time import sleep
import time
from bs4 import BeautifulSoup
import sys
import requests, urllib.request, os
from selenium.common.exceptions import TimeoutException
domain="http://blog.nogizaka46.com/"
member="manatsu.akimoto" #Mitgliedsbezeichnung
url=domain+member+"/"
def getImages(soup,cnt,mouthtrue):
member_path="./"+member
#Funktion zum Speichern des Bildes
for entry in soup.find_all("div", class_="entrybody"):#Holen Sie sich alle Eintragskörper
for img in entry.find_all("img"):#Holen Sie sich alle img
cnt +=1
imgurl=img.attrs["src"]
imgurlnon=imgurl.replace('https','http')
if mouthtrue:
try:
urllib.request.urlretrieve(imgurlnon, member_path+ str(year)+'0'+str(mouth) + "-" + str(cnt) + ".jpeg ")
except:
print("error",imgurlnon)
else:
try:
urllib.request.urlretrieve(imgurlnon, member_path + str(year)+str(mouth) + "-" + str(cnt) + ".jpeg ")
except:
print("error",imgurlnon)
if(__name__ == "__main__"):
#Start des Blogs zum Speichern
year=2012
mouth=12
#Ende des Blogs zum Speichern
endyear=2020
endmouth=6
while(True):
mouthtrue=True
if mouth<10:
BlogPageURL=url+"?d="+str(year)+"0"+str(mouth)
else:
BlogPageURL=url+"?d="+str(year)+str(mouth)
mouthtrue=False
headers = {"User-Agent": "Mozilla/5.0"}
soup = BeautifulSoup(requests.get(BlogPageURL, headers=headers).content, 'html.parser')#Holen Sie sich HTML
print(year,mouth)
sleep(3)
cnt = 0
ht=soup.find_all("div", class_="paginate")
print("ht",ht)
getImages(soup,cnt,mouthtrue)#Aufrufen der Bildspeicherfunktion
if len(ht)>0:#Wenn im selben Monat mehrere Seiten vorhanden sind, speichern Sie nur diese Seite
ht_url=ht[0]
print(ht_url)
url_all=ht_url.find_all("a")
for i,hturl in enumerate(url_all):
if (i+1)==len(url_all):
break
link = hturl.get("href")
print("url",url+link)
soup = BeautifulSoup(requests.get(url+link, headers=headers).content, 'html.parser')
sleep(3)
getImages(soup,cnt,mouthtrue)#Aufrufen der Bildspeicherfunktion
if year==endyear and mouth==endmouth:
print("Finish")
sys.exit()#Das Ende des Programms
if mouth==12:
mouth=1
year=year+1
print("update",year,mouth)
else:
mouth=mouth+1
print("update",year,mouth)
Übrigens: "#Wenn im selben Monat mehrere Seiten vorhanden sind, speichern Sie nur diese Seiten" ist ein Bild wie dieses. Im Beispiel dieses Bildes ist es Manatsu Akimotos Blog im Januar 2013, aber nachdem Sie das Bild auf der ersten Seite gespeichert haben, erhalten Sie 2, 3 und 4 Links und zeigen das Bild auf jeder Seite an. Der Inhalt ist zu speichern.
Als ich es in Mr. Manatsu Akimotos Blog versuchte, konnte ich bestätigen, dass das Bild in der folgenden Form gespeichert wurde.
Übrigens dachte ich, dass es im vorherigen Programm schwer zu verstehen war, deshalb werde ich das Ausführungsergebnis dieses Teils anzeigen. Es ist ein wenig verwirrend, aber so wird jede monatliche Seite durch Scraping angezeigt.
ht
[<div class="paginate"> 1 | <a href="?p=2&d=201301"> 2 </a> | <a href="?p=3&d=201301"> 3 </a> | <a href="?p=4&d=201301"> 4 </a> | <a href="?p=2&d=201301">></a></div>, <div class="paginate"> 1 | <a href="?p=2&d=201301"> 2 </a> | <a href="?p=3&d=201301"> 3 </a> | <a href="?p=4&d=201301"> 4 </a> | <a href="?p=2&d=201301">></a></div>]
Danach können Sie sehen, dass nach dem Abkratzen der ersten Seite wie unten gezeigt die vierte Seite abgekratzt wird.
url http://blog.nogizaka46.com/manatsu.akimoto/?p=2&d=201301
url http://blog.nogizaka46.com/manatsu.akimoto/?p=3&d=201301
url http://blog.nogizaka46.com/manatsu.akimoto/?p=4&d=201301
Abgesehen davon hatte ich beim Speichern von Sayuri Inoues Blog einen Spielraum von über mehreren Tausend (2385 durch Löschen unnötiger Dinge). Sie können den Teil von Sayus hartem Arbeiter sehen.
Der Artikel unter https://qiita.com/xxPowderxx/items/e9726b8b8a114655d796 war wahnsinnig hilfreich.
Recommended Posts