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.
・ Python ・ Belle soupe
pip install requests
pip install beautifulsoup4
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.
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.
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&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>]
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 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).
Vous pouvez voir le rôle du travailleur acharné de Sayu.
L'article à https://qiita.com/xxPowderxx/items/e9726b8b8a114655d796 était incroyablement utile.
Recommended Posts