Cette fois, j'aimerais écrire et expliquer le code qui recueille les images de l'URL spécifiée à l'aide du web scraping.
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()
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.
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.
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.
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