Scraping ist das, worauf Sie sich verlassen, wenn Sie eine große Menge an Bilddaten benötigen, z. B. maschinelles Lernen. Es gibt bereits viele Artikel, die Bilder von verschiedenen Websites wie Google, Yahoo und Bing aufnehmen, aber dieses Mal werde ich über die Google-Bildsuche schreiben.
Viele Programme, die Bilder aus der Google Bildsuche erfassen, wurden eingeführt, aber es gibt immer noch wenige, die Bilder ordnungsgemäß erfassen können, unabhängig davon, ob es viele Spezifikationsänderungen oder Anti-Scraping-Maßnahmen gibt. Wie Sie sehen können, indem Sie die Suchergebnisse der Google-Bildsuche mithilfe von Anfragen und Beautiful Soup durchsuchen, enthalten die Einkommensinformationen nur etwa 20 Bilddaten.
Vor diesem Hintergrund ist Selen, das Hauptthema, hier. Wenn Sie die Suchergebnisseite mit Selenium ** anzeigen **, wird der Inhalt wie HTML natürlich so umgeschrieben, dass er entsprechend dem angezeigten Inhalt viele Fotodaten enthält (obwohl Ursache und Wirkung umgekehrt sind). Sie können viele Bilder erhalten, indem Sie sie in diesen Zustand bringen und dann erneut kratzen. Google ist jedoch ziemlich hart und in diesem Zustand kann nur das Daumenbild erhalten werden. Wenn Hunderte von Bilddaten in Originalgröße eingebettet sind, handelt es sich um eine große Datenmenge, sodass dies unabhängig von Google selbstverständlich ist.
Sie können von hier aus auf einzelne Bilder klicken und sie einzeln in ihrer Originalgröße speichern. Wenn Sie jedoch zunächst keine große Bildgröße benötigen, können Sie gewinnen, indem Sie die Miniaturansichten so wie sie sind sammeln. Angenommen, Sie sind bereit, Selenium zu verwenden, z. B. das Herunterladen von Chromedriver Lass uns gehen.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import os
import time
import requests
import shutil
import base64
options = Options()
options.add_argument("--disable-gpu")
options.add_argument("--disable-extensions")
options.add_argument('--proxy-server="direct://"')
options.add_argument("--proxy-bypass-list=*")
options.add_argument("--start-maximized")
#Im Headless-Modus wird es nicht "angezeigt", sodass nur etwa 100 Elemente heruntergeladen werden können.
DRIVER_PATH = "chromedriver.exe" #Lage des Chromedriver
driver = webdriver.Chrome(executable_path=DRIVER_PATH, chrome_options=options)
query = input('Search word? :')
url = ("https://www.google.com/search?hl=jp&q=" + "+".join(query.split()) + "&btnG=Google+Search&tbs=0&safe=off&tbm=isch")
driver.get(url)
#Scrollen Sie entsprechend nach unten--
for t in range(5):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
time.sleep(1.5)
try:driver.find_element_by_class_name("mye4qd").click() #Drücken Sie die Taste "Weitere Suchergebnisse anzeigen"
except:pass
for t in range(5):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
time.sleep(1.5)
srcs = driver.find_elements(By.XPATH, '//img[@class="rg_i Q4LuWd"]')
try:os.mkdir(query) #Erstellen Sie einen Ordner mit demselben Namen wie der Suchbegriff und speichern Sie das Ziel
except:pass
#--
i = 0 #Zähler zum Zuweisen von Seriennummern zu Dateinamen
print("Downloading...")
for j, src in enumerate(srcs):
if j % 50 == 0 or j == len(srcs)-1:
print("|"+ ("■" * (20 * j // (len(srcs)-1)))+ (" -" * (20 - 20 * j // (len(srcs)-1)))+ "|",f"{100*j//(len(srcs)-1)}%") #Derjenige, der den Fortschritt des Downloads anzeigt
file_name = f"{query}/{'_'.join(query.split())}_{str(i).zfill(3)}.jpg " #Dateiname oder Speicherort
src = src.get_attribute("src")
if src != None:
#In Bild konvertieren--
if "base64," in src:
with open(file_name, "wb") as f:
f.write(base64.b64decode(src.split(",")[1]))
else:
res = requests.get(src, stream=True)
with open(file_name, "wb") as f:
shutil.copyfileobj(res.raw, f)
#--
i += 1
driver.quit() #schließe das Fenster
print(f"Download is complete. {i} images are downloaded.")
Geben Sie nach der Ausführung den Suchbegriff ein und warten Sie eine Weile. Anschließend sollten ca. 400 bis 1.000 Bilder in dem Ordner mit demselben Namen wie der Suchbegriff gespeichert werden.
Das maschinelle Lernen scheint Fortschritte zu machen, da Hunderte bis Tausende von Bildern in etwa 2 Minuten gesammelt werden (obwohl ich selbst noch nie einen Datensatz erstellt habe). Ich habe gerade angefangen, Kratzen und Krabbeln zu studieren, daher würde ich mich freuen, wenn Sie mir Verbesserungen oder schlechte Punkte mitteilen könnten.
https://tanuhack.com/selenium/