[PYTHON] Collection d'images avec scraping Web

Cette fois, j'aimerais écrire et expliquer le code qui recueille les images de l'URL spécifiée à l'aide du web scraping.

Code d'implémentation

import requests
from requests.compat import urljoin
from bs4 import BeautifulSoup
import time
from PIL import Image
import urllib.request
import sys.os

class web_scryping:
    def __init__(self , url):
        self.url = url
        self.soup = BeautifulSoup(requests.get(self.url).content, 'lxml')
        
class download_images(web_scryping):
    def download(self , max_down_num):
        self.down_num = 0
        self.max_down_num = max_down_num
        self.save_path = './img/' + str(self.down_num+1) + '.jpg'
        now_num = 0
        for link in self.soup.find_all("img"):
            src_attr = link.get("src")
            target = urljoin(self.url, src_attr)
            resp = requests.get(target)
            image = resp.content
            #breakpoint()
            print(str(resp) + '  ' + str(now_num))
            now_num = now_num + 1
            if str(resp) != '<Response [404]>':
                with open(self.save_path, 'wb') as f:
                    f.write(image)
                self.down_num = self.down_num + 1
            time.sleep(1)
            self.save_path = './img/' + str(self.down_num+1) + '.jpg'
            if self.down_num == self.max_down_num:
                break
                
    def img_resize(self , img_path):
        try:            
            im = Image.open(img_path)
            print("Largeur de la taille de l'image d'origine: {}, height: {}".format(im.size[0], im.size[1]))
            im_resize = im.resize(size=(800,1200))         
            im_resize.save(save_path)
            print('image resize sucess')
        except:
            print('image resize failed')


def main():
    url = sys.argv[0]
    di = download_images(url)
    di.download(50)

if __name__ == '__main__':
    main()

À propos du déroulement du programme

Étape 1

def main():
    url = sys.argv[0]
    di = download_images(url)
    di.download(50)

Spécifiez l'URL comme premier argument dans l'argument de ligne de commande. Transmettez l'URL à la classe download_images, qui hérite de la classe web_scryping.

Étape 2

class web_scryping:
    def __init__(self , url):
        self.url = url
        self.soup = BeautifulSoup(requests.get(self.url).content, 'lxml')

La classe download_images hérite de la classe web_scryping, et comme la classe download_images n'a pas de méthode init, la méthode init de la classe web_scryping est démarrée. Ici, l'URL est obtenue par la méthode requests.get, et le contenu du html est analysé par BeautifulSoup. Placez le résultat de l'analyse dans une variable de classe appelée self.soup.

Étape 3

class download_images(web_scryping):
    def download(self , max_down_num):
        self.down_num = 0
        self.max_down_num = max_down_num
        self.save_path = './img/' + str(self.down_num+1) + '.jpg'
        now_num = 0
        for link in self.soup.find_all("img"):
            src_attr = link.get("src")
            target = urljoin(self.url, src_attr)
            resp = requests.get(target)
            image = resp.content
            #breakpoint()
            print(str(resp) + '  ' + str(now_num))
            now_num = now_num + 1
            if str(resp) != '<Response [404]>':
                with open(self.save_path, 'wb') as f:
                    f.write(image)
                self.down_num = self.down_num + 1
            time.sleep(1)
            self.save_path = './img/' + str(self.down_num+1) + '.jpg'
            if self.down_num == self.max_down_num:
                break

Utilisez la méthode de téléchargement de la classe download_images à l'étape 1 pour démarrer le téléchargement. Pour self.save_path, spécifiez le nom du fichier image de plus en plus comme un nombre .jpg dans le répertoire img. self.soup.find_all ("img"): Trouvez la balise img en html. src_attr = link.get ("src"): Récupère l'élément src de la balise img. image = resp.content: La variable image contient l'objet image. if str (resp)! = '<Response [404]>': La variable resp contient le résultat de la réponse, donc si ce n'est pas 404, enregistrez l'image. time.sleep (1): Lors du grattage, il n'est pas souhaitable de mettre un fardeau sur le site Web, utilisez donc la méthode de veille pour gagner du temps.

prime

def img_resize(self , img_path):
        try:            
            im = Image.open(img_path)
            print("Largeur de la taille de l'image d'origine: {}, height: {}".format(im.size[0], im.size[1]))
            im_resize = im.resize(size=(800,1200))         
            im_resize.save(save_path)
            print('image resize sucess')
        except:
            print('image resize failed')

Cette méthode est une méthode pour ajuster la taille de l'image, mais je ne l'utilise pas car la résolution n'était pas très bonne lorsque je l'ai augmentée.

Recommended Posts

Collection d'images avec scraping Web
Grattage de bande sur une seule ligne avec du tsé
raclage Web
grattage Web (prototype)
Méthode de collecte d'images
J'ai essayé d'obtenir une image en grattant
Obtenez des informations sur les matchs de course de bateaux avec le web scraping
Grattage de l'image du blog de Hinatazaka
Premiers pas avec le Web Scraping
Web scraping avec python + JupyterLab
API Web EXE par Python
Enregistrez des images avec le web scraping
Technologie de grattage WEB et préoccupations
Appelez l'API Bing Image Search v5 depuis Python pour collecter des images
Compromis dans le scraping et l'exploration Web
Exploration Web, scraping Web, acquisition de caractères et sauvegarde d'image avec python
Web scraping avec Selenium (Python)
Traitement d'image par python (Pillow)
Collection de traitement d'image en Python
Web scraping à l'aide d'AWS lambda
Web scraping débutant avec python
Bibliothèque de scraping Web utilisant des algorithmes Scrapely
Ne collectez que des images faciales d'une personne spécifique grâce au grattage Web
Obtenez le lien de téléchargement Splunk en grattant
Grattage WEB avec BeautifulSoup4 (page en couches)
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
GAN: DCGAN Part1 - Scraping d'images Web
Une collection de serveurs Web à une seule ligne
Grattage écologique grâce au traitement d'image
Faisons du scraping d'images avec Python
Web scraping pour les débutants en Python (1)
Grattage Web pour les notifications d'avertissement météo.
Web scraping pour les débutants en Python (4) -1
Nogisaka 46 Obtenez des images de blog en grattant
10 questions à vérifier avant le web scraping
"Classification des déchets par image!" Journal de création d'application jour3 ~ Application Web avec Django ~