[PYTHON] Nogizaka46 Ein Programm, das Blog-Bilder automatisch speichert

Einführung

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.

Was ich diesmal gemacht habe

Was wurde verwendet

・ Python ・ Schöne Suppe

Scraping-Umgebung installieren

pip install requests
pip install beautifulsoup4

Python-Code

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. スクリーンショット 2020-06-26 15.21.20.png 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.

Ausführungsergebnis

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&amp;d=201301"> 2 </a> | <a href="?p=3&amp;d=201301"> 3 </a> | <a href="?p=4&amp;d=201301"> 4 </a> | <a href="?p=2&amp;d=201301">></a></div>, <div class="paginate"> 1  | <a href="?p=2&amp;d=201301"> 2 </a> | <a href="?p=3&amp;d=201301"> 3 </a> | <a href="?p=4&amp;d=201301"> 4 </a> | <a href="?p=2&amp;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

abschließend

Abgesehen davon hatte ich beim Speichern von Sayuri Inoues Blog einen Spielraum von über mehreren Tausend (2385 durch Löschen unnötiger Dinge). スクリーンショット 2020-06-26 15.40.16.png Sie können den Teil von Sayus hartem Arbeiter sehen.

Verweise

Der Artikel unter https://qiita.com/xxPowderxx/items/e9726b8b8a114655d796 war wahnsinnig hilfreich.

Recommended Posts

Nogizaka46 Ein Programm, das Blog-Bilder automatisch speichert
Veröffentlichen und Verwenden eines Programms, das automatisch Gesichtsbilder bestimmter Personen sammelt
Nogizaka46 Holen Sie sich Blog-Bilder durch Schaben
Erstellen Sie mit Selenium ein Programm, mit dem Sie Ihr Lieblingsbild erstellen können
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
[Python] Ein Programm, das Treppen mit # erstellt
Ein Programm, das "Takenoko no Sato" automatisch zu "Kinoko no Yama" "korrekt" korrigiert.
Eine Geschichte über das Schreiben eines Programms, das Ihre eigenen Asset-Übergänge automatisch zusammenfasst
Ein Programm, das Python zum Abspielen von Junk verwendet
PGM, das automatisch eine Wanderroute erstellt
[Python] Ein Programm, das die Partitur rundet
Erstellen Sie ein Programm, das jeden Morgen automatisch die Körpertemperatur eingibt und sendet [Hinweis]
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
Ein System, das automatisch an Zoomklassen der Universität teilnimmt
Ein Programm, das doppelte Anweisungen in Python entfernt
Programm zur Suche nach demselben Bild
Vim-Plug-In, das automatisch Python-Stile formatiert
Ein Shell-Programm, das eine Fibonacci-Sequenz anzeigt
[Python] Ein Programm, das die Anzahl der Täler zählt
Shell-Programm, das in Vielfachen von 3 aho wird
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Python-Programm, das ical-Daten in Text konvertiert
Ein Programm, das die für iOS-App-Symbole in Python erforderliche Bildgröße automatisch ändert
Python-Programm, das täglich Tweets mit bestimmten Schlüsselwörtern sammelt und in CSV speichert