Dieses Mal möchte ich den Code schreiben und erklären, der Bilder von der angegebenen URL mithilfe von Web Scraping sammelt.
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("Originalbildgröße Breite: {}, 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)
Geben Sie die URL als erstes Argument im Befehlszeilenargument an. Übergeben Sie die URL an die Klasse download_images, die von der Klasse web_scryping erbt.
class web_scryping:
def __init__(self , url):
self.url = url
self.soup = BeautifulSoup(requests.get(self.url).content, 'lxml')
Die Klasse download_images erbt von der Klasse web_scryping. Da die Klasse download_images keine Init-Methode hat, wird die Init-Methode der Klasse web_scryping gestartet. Hier wird die URL von der request.get-Methode abgerufen und der Inhalt von HTML wird von BeautifulSoup analysiert. Fügen Sie das Analyseergebnis in eine Klassenvariable namens self.soup ein.
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
Verwenden Sie die Download-Methode der Klasse download_images in Schritt 1, um den Download zu starten. Geben Sie für self.save_path den Namen der Bilddatei immer mehr wie eine .jpg-Nummer im img-Verzeichnis an. self.soup.find_all ("img"): Suchen Sie das img-Tag in HTML. src_attr = link.get ("src"): Ruft das src-Element vom img-Tag ab. image = resp.content: Die Bildvariable enthält das Bildobjekt. if str (resp)! = '<Response [404]>': Die resp-Variable enthält das Ergebnis der Antwort. Wenn dies nicht 404 ist, speichern Sie das Bild. time.sleep (1): Beim Schaben ist es nicht wünschenswert, die Website zu belasten. Verwenden Sie daher die Schlafmethode, um Zeit zu sparen.
def img_resize(self , img_path):
try:
im = Image.open(img_path)
print("Originalbildgröße Breite: {}, 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')
Diese Methode ist eine Methode zum Anpassen der Bildgröße, aber ich verwende sie nicht, da die Auflösung beim Erhöhen nicht so gut war.
Recommended Posts