Le grattage est ce sur quoi vous comptez lorsque vous avez besoin d'une grande quantité de données d'image comme l'apprentissage automatique. Il existe déjà de nombreux articles qui reprennent des images de divers sites tels que Google, Yahoo et Bing, mais cette fois j'écrirai sur la recherche d'images Google.
De nombreux programmes qui collectent des images à partir de Google Image Search ont été introduits, mais il y en a encore peu qui peuvent collecter des images correctement, qu'il y ait de nombreuses modifications de spécifications ou des mesures anti-grattage. Comme vous pouvez le voir en grattant les résultats de la recherche d'images Google à l'aide de requêtes et de Beautiful Soup, les informations sur les revenus ne contiennent qu'environ 20 données d'image.
Cela dit, le sélénium, le sujet principal, est ici. Lorsque vous ** affichez ** la page de résultats de recherche à l'aide de Selenium, le contenu tel que HTML sera naturellement réécrit pour inclure beaucoup de données photo en fonction du contenu affiché (bien que la cause et l'effet soient inversés). Vous pouvez obtenir beaucoup d'images en l'amenant à cet état, puis en le grattant à nouveau. Cependant, Google est assez difficile, et seule l'image du pouce peut être obtenue dans cet état. Eh bien, si des centaines de données d'image de taille d'origine sont intégrées, ce sera une énorme quantité de données, donc c'est naturel indépendamment de Google.
Vous pouvez cliquer sur des images individuelles à partir d'ici et les enregistrer une par une dans leur taille d'origine, mais si vous n'avez pas besoin d'avoir une grande taille d'image en premier lieu, vous pouvez gagner en collectant les vignettes telles qu'elles sont. En supposant que vous êtes prêt à utiliser Selenium, comme le téléchargement de Chromedriver Allons-y.
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")
#En mode sans tête, il n'est pas "affiché", donc seulement environ 100 éléments peuvent être téléchargés.
DRIVER_PATH = "chromedriver.exe" #Emplacement de 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)
#Faites défiler correctement--
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() #En appuyant sur le bouton "Afficher plus de résultats de recherche"
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) #Créer un dossier avec le même nom que le terme de recherche, enregistrer la destination
except:pass
#--
i = 0 #Compteur pour attribuer des numéros de série aux noms de fichiers
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)}%") #Celui qui montre la progression du téléchargement
file_name = f"{query}/{'_'.join(query.split())}_{str(i).zfill(3)}.jpg " #Nom ou emplacement du fichier
src = src.get_attribute("src")
if src != None:
#Convertir en image--
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() #ferme la fenêtre
print(f"Download is complete. {i} images are downloaded.")
Après l'exécution, entrez le terme de recherche et attendez un moment, puis environ 400 à 1000 images doivent être enregistrées dans le dossier portant le même nom que le terme de recherche.
L'apprentissage automatique semble progresser car des centaines à des milliers d'images sont collectées en environ 2 minutes (même si je n'ai jamais créé de jeu de données moi-même). Je viens de commencer à étudier le grattage et l'exploration, donc j'apprécierais que vous me disiez des améliorations ou des points négatifs.
https://tanuhack.com/selenium/