[PYTHON] Nogizaka46 Un programme qui enregistre automatiquement les images de blog

introduction

Bonjour. C'est @tfujitani, un nerd des pentes. Cette fois, j'ai créé Python qui peut enregistrer l'image du blog du membre spécifié de Nogisaka 46 de manière entièrement automatique, donc je vais la publier. Au fait, la raison pour laquelle j'ai décidé de faire de ce programme «trigger» est que Sayuri Inoue, qui était un bon candidat, a obtenu son diplôme. (C'est une bonne chanson, n'est-ce pas?) Le programme créé à cet effet sortira maintenant.

Ce que j'ai fait cette fois

Ce qui a été utilisé

・ Python ・ Belle soupe

Installer un environnement de scraping

pip install requests
pip install beautifulsoup4

Code Python

Je racle en utilisant Beautiful Soup et Python3. Cette fois, spécifiez l'URL du blog du membre que vous souhaitez spécifier. Pour Manatsu Akimoto (http://blog.nogizaka46.com/manatsu.akimoto/), "manatsu.akimoto" Rika Ito (http://blog.nogizaka46.com/riria.itou/) est comme "riria.itou". Vous pouvez également spécifier les points de début et de fin de la période que vous souhaitez enregistrer.

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" #Désignation de membre
url=domain+member+"/"

def getImages(soup,cnt,mouthtrue):
    member_path="./"+member
    #Fonction pour enregistrer l'image
    for entry in soup.find_all("div", class_="entrybody"):#Obtenir tous les corps d'entrée
        for img in entry.find_all("img"):#Obtenir toutes les images
            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__"):
    #Début du blog à enregistrer
    year=2012
    mouth=12
    #Fin du blog à enregistrer
    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')#Obtenez du HTML
        print(year,mouth)
        sleep(3)
        cnt = 0
        ht=soup.find_all("div", class_="paginate")
        print("ht",ht)
        getImages(soup,cnt,mouthtrue)#Appel de la fonction de stockage d'image
        if len(ht)>0:#S'il y a plusieurs pages dans le même mois, n'enregistrez que cette page
            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)#Appel de la fonction de stockage d'image
        if year==endyear and mouth==endmouth:
            print("Finish")
            sys.exit()#La fin du programme
        if mouth==12:
            mouth=1
            year=year+1
            print("update",year,mouth)
        else:
            mouth=mouth+1
            print("update",year,mouth)

Au fait, "#S'il y a plusieurs pages dans le même mois, n'enregistrez que ces pages" est une image comme celle-ci. スクリーンショット 2020-06-26 15.21.20.png Dans l'exemple de cette image, il s'agit du blog de Manatsu Akimoto en janvier 2013, mais après avoir sauvegardé l'image sur la première page, obtenez 2, 3 et 4 liens et affichez l'image sur chaque page. Le contenu est à sauvegarder.

Résultat d'exécution

Lorsque je l'ai essayé sur le blog de M. Manatsu Akimoto, j'ai pu confirmer que l'image avait été enregistrée sous la forme suivante.

Au fait, je pensais que ht était difficile à comprendre dans le programme précédent, je vais donc afficher le résultat de l'exécution de cette partie. C'est un peu déroutant, mais comme ça, chaque page mensuelle est affichée par grattage.

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>]

Après cela, vous pouvez voir qu'après avoir gratté la première page comme indiqué ci-dessous, la quatrième page est grattée.

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

en conclusion

En passant, quand j'ai sauvé le blog de Sayuri Inoue, j'avais une marge de plus de plusieurs milliers (j'ai effacé les extras et c'était 2385). スクリーンショット 2020-06-26 15.40.16.png Vous pouvez voir le rôle du travailleur acharné de Sayu.

Les références

L'article à https://qiita.com/xxPowderxx/items/e9726b8b8a114655d796 était incroyablement utile.

Recommended Posts

Nogizaka46 Un programme qui enregistre automatiquement les images de blog
Publier et utiliser un programme qui collecte automatiquement les images du visage de personnes spécifiées
Nogisaka 46 Obtenez des images de blog en grattant
Créez un programme qui peut générer votre image préférée avec Selenium
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
[Python] Un programme qui crée des escaliers avec #
Un programme qui corrige automatiquement "Takenoko no Sato" en "Kinoko no Yama" "correctement"
Une histoire sur l'écriture d'un programme qui résume automatiquement vos propres transitions d'actifs
Un programme qui utilise Python pour lire des fichiers indésirables
PGM qui crée automatiquement un itinéraire à pied
[Python] Un programme qui arrondit le score
Créez un programme qui saisit et envoie automatiquement la température corporelle tous les matins [Note]
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
Un système qui assiste automatiquement aux cours de zoom universitaires
Un programme qui supprime les instructions en double en Python
Programme pour rechercher la même image
Plug-in Vim qui formate automatiquement les styles Python
Un programme shell qui affiche une séquence de Fibonacci
[Python] Un programme qui compte le nombre de vallées
Programme Shell qui devient aho par multiples de 3
[Python] Un programme qui compare les positions des kangourous.
Programme Python qui convertit les données ical en texte
Un programme qui redimensionne automatiquement la taille d'image requise pour les icônes d'application iOS en Python
Programme Python qui recueille quotidiennement des tweets contenant des mots-clés spécifiques et les enregistre en csv