Cette question a déjà été posée à plusieurs reprises, mais toutes les réponses datent d'au moins deux ans et reposent actuellement sur l'API ajax.googleapis.com, qui n'est plus prise en charge.
Est-ce que quelqu'un sait d'une autre manière? J'essaie de télécharger une centaine de résultats de recherche et, en plus des API Python, j'ai essayé de nombreux programmes de bureau, de navigateur ou d'ajout de navigateur, qui ont tous échoué.
Merci!
Utilisez le Recherche personnalisée Google pour ce que vous voulez réaliser. Voir @ i08in's answer of " Python - Télécharger des images à partir de Google Recherche d'images? " il a une excellente description, des exemples de scripts et des références de bibliothèques.
Bonne chance!
Pour télécharger un nombre illimité d'images à partir de la recherche d'images Google à l'aide de Selenium:
from Selenium import webdriver
from Selenium.webdriver.common.keys import Keys
import os
import json
import urllib2
import sys
import time
# adding path to geckodriver to the OS environment variable
# assuming that it is stored at the same path as this script
os.environ["PATH"] += os.pathsep + os.getcwd()
download_path = "dataset/"
def main():
searchtext = sys.argv[1] # the search query
num_requested = int(sys.argv[2]) # number of images to download
number_of_scrolls = num_requested / 400 + 1
# number_of_scrolls * 400 images will be opened in the browser
if not os.path.exists(download_path + searchtext.replace(" ", "_")):
os.makedirs(download_path + searchtext.replace(" ", "_"))
url = "https://www.google.co.in/search?q="+searchtext+"&source=lnms&tbm=isch"
driver = webdriver.Firefox()
driver.get(url)
headers = {}
headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
extensions = {"jpg", "jpeg", "png", "gif"}
img_count = 0
downloaded_img_count = 0
for _ in xrange(number_of_scrolls):
for __ in xrange(10):
# multiple scrolls needed to show all 400 images
driver.execute_script("window.scrollBy(0, 1000000)")
time.sleep(0.2)
# to load next 400 images
time.sleep(0.5)
try:
driver.find_element_by_xpath("//input[@value='Show more results']").click()
except Exception as e:
print "Less images found:", e
break
# imges = driver.find_elements_by_xpath('//div[@class="rg_meta"]') # not working anymore
imges = driver.find_elements_by_xpath('//div[contains(@class,"rg_meta")]')
print "Total images:", len(imges), "\n"
for img in imges:
img_count += 1
img_url = json.loads(img.get_attribute('innerHTML'))["ou"]
img_type = json.loads(img.get_attribute('innerHTML'))["ity"]
print "Downloading image", img_count, ": ", img_url
try:
if img_type not in extensions:
img_type = "jpg"
req = urllib2.Request(img_url, headers=headers)
raw_img = urllib2.urlopen(req).read()
f = open(download_path+searchtext.replace(" ", "_")+"/"+str(downloaded_img_count)+"."+img_type, "wb")
f.write(raw_img)
f.close
downloaded_img_count += 1
except Exception as e:
print "Download failed:", e
finally:
print
if downloaded_img_count >= num_requested:
break
print "Total downloaded: ", downloaded_img_count, "/", img_count
driver.quit()
if __== "__main__":
main()
Le code complet est ici .
Celui-ci, ça va?
https://github.com/hardikvasa/google-images-download
il vous permet de télécharger des centaines d’images et propose une multitude de filtres pour personnaliser votre recherche.
Si vous souhaitez télécharger plus de 100 images par mot clé, vous devez installer «Selenium» avec «chromedriver».
Si vous avez installé la bibliothèque pip ou exécutez le fichier setup.py, Selenium s’est automatiquement installé sur votre ordinateur. Vous aurez également besoin du navigateur Chrome sur votre ordinateur. Pour chromedriver:
Téléchargez le bon pilote chromed en fonction de votre système d'exploitation.
Sous Windows ou MAC, si pour une raison quelconque, chromedriver vous pose problème, téléchargez-le dans le répertoire actuel et exécutez la commande.
Cependant, sur Windows, le chemin d'accès à chromedriver doit être indiqué dans le format suivant:
C:\complete\path\to\chromedriver.exe
Sous Linux, si vous rencontrez des problèmes pour installer Google Chrome Browser, reportez-vous à ce Guide CentOS, Amazon Linux ou Ubuntu.
Pour Tous les systèmes d'exploitation, vous devrez utiliser les arguments '--chromedriver' ou '-cd' pour spécifier le chemin de chromedriver que vous avez téléchargé sur votre ordinateur.
j'utilise ce script pour télécharger des images à partir de la recherche google et je les utilise pour mon classement mes classificateurs.
from bs4 import BeautifulSoup
import requests
import re
import urllib2
import os
import cookielib
import json
def get_soup(url,header):
return BeautifulSoup(urllib2.urlopen(urllib2.Request(url,headers=header)),'html.parser')
query = raw_input("query image")# you can change the query for the image here
image_type="ActiOn"
query= query.split()
query='+'.join(query)
url="https://www.google.co.in/search?q="+query+"&source=lnms&tbm=isch"
print url
#add the directory for your image here
DIR="Pictures"
header={'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36"
}
soup = get_soup(url,header)
ActualImages=[]# contains the link for Large original images, type of image
for a in soup.find_all("div",{"class":"rg_meta"}):
link , Type =json.loads(a.text)["ou"] ,json.loads(a.text)["ity"]
ActualImages.append((link,Type))
print "there are total" , len(ActualImages),"images"
if not os.path.exists(DIR):
os.mkdir(DIR)
DIR = os.path.join(DIR, query.split()[0])
if not os.path.exists(DIR):
os.mkdir(DIR)
###print images
for i , (img , Type) in enumerate( ActualImages):
try:
req = urllib2.Request(img, headers={'User-Agent' : header})
raw_img = urllib2.urlopen(req).read()
cntr = len([i for i in os.listdir(DIR) if image_type in i]) + 1
print cntr
if len(Type)==0:
f = open(os.path.join(DIR , image_type + "_"+ str(cntr)+".jpg"), 'wb')
else :
f = open(os.path.join(DIR , image_type + "_"+ str(cntr)+"."+Type), 'wb')
f.write(raw_img)
f.close()
except Exception as e:
print "could not load : "+img
print e
Pour améliorer un peu la réponse de Ravi Hirani, le moyen le plus simple consiste à utiliser ceci:
from icrawler.builtin import GoogleImageCrawler
google_crawler = GoogleImageCrawler(storage={'root_dir': 'D:\\projects\\data core\\helmet detection\\images'})
google_crawler.crawl(keyword='cat', max_num=100)
J'ai essayé beaucoup de codes mais aucun d'entre eux ne fonctionnait pour moi. Je poste mon code de travail ici. J'espère que cela aidera les autres.
J'utilise Python version 3.6 et utilisé icrawler
Tout d’abord, vous devez télécharger icrawler sur votre système.
Puis lancez le code ci-dessous.
from icrawler.examples import GoogleImageCrawler
google_crawler = GoogleImageCrawler()
google_crawler.crawl(keyword='krishna', max_num=100)
Remplacez keyword
krishna
par le texte de votre choix.
Note: - L'image téléchargée nécessite un chemin. En ce moment, j'ai utilisé le même répertoire que le script. Vous pouvez définir un répertoire personnalisé via le code ci-dessous.
google_crawler = GoogleImageCrawler('path_to_your_folder')
Vous devez utiliser l'API de recherche personnalisée. Il y a un pratique Explorer ici. J'utilise urllib2. Vous devez également créer une clé API pour votre application à partir de la console du développeur.
J'essaie cette bibliothèque qui peut être utilisé à la fois: un outil de ligne de commande ou une bibliothèque python. Il y a beaucoup d'arguments pour trouver des images avec différents critères.
Ce sont des exemples tirés de sa documentation, pour l’utiliser comme une bibliothèque python:
from google_images_download import google_images_download #importing the library
response = google_images_download.googleimagesdownload() #class instantiation
arguments = {"keywords":"Polar bears,baloons,Beaches","limit":20,"print_urls":True} #creating list of arguments
paths = response.download(arguments) #passing the arguments to the function
print(paths) #printing absolute paths of the downloaded images
ou comme un outil en ligne de commande, comme suit:
$ googleimagesdownload --k "car" -sk 'red,blue,white' -l 10
Vous pouvez l'installer avec pip install google_images_download
Pour tirer le meilleur parti de googleimagedownload, utilisez pip3 install pour l'obtenir, puis utilisez l'encapsuleur suivant pour le transformer en une API. En gros, vous pouvez voir que, dans le code, j'ai téléchargé 10 grandes images qui sont marquées avec une étiquette pour les réutiliser (mal orthographiées par les auteurs originaux). Si je ne passe pas un argument de -k = "poivron jaune", il téléchargera 10 images de poivron rouge par défaut. Vous pouvez modifier les arguments par défaut du dictionnaire googleImageDownloader que j'ai fourni, comme vous le souhaitez, à condition qu'ils soient conformes au google_images_download.py du développeur.
#!/usr/bin/env python3
import sys
import subprocess
import re
def main( arguments ):
googleImageDownloader = {'s':'large', 'l':'10', 'r':'labled-for-reuse', 'k':'red pepper'}
for argvitem in arguments[1:]:
argumentName = re.sub( r'^-(.*)', r'\1', argvitem )
argumentName = re.sub( r'^-(.*)', r'\1', argumentName )
argumentName = re.sub( r'(.*)=(.*)', r'\1', argumentName )
value = re.sub( r'(.*)=(.*)', r'\2', argvitem )
googleImageDownloader[argumentName] = value
callingString = "googleimagesdownload"
for key, value in googleImageDownloader.items():
if " " in value:
value = "\"" + value + "\""
callingString+= " -" + key + " " + value
print( callingString )
statusAndOutputText = subprocess.getstatusoutput( callingString )
print( statusAndOutputText[1] )
if "__main__" == __name__:
main( sys.argv )
Donc, je viens de lancer imagedownload.py ci-dessus en passant n'importe quel argument avec - ou -:
$ python ./imagedownload.py -k="yellow pepper"
pour obtenir le résultat suivant:
googleimagesdownload -s large -l 10 -k "yellow pepper" -r labeled-for-reuse
Item no.: 1 --> Item name = yellow pepper
Evaluating...
Starting Download...
Completed Image ====> 1. paprika-vegetables-yellow-red-53008.jpe
Completed Image ====> 2. plant-fruit-orange-food-pepper-produce-vegetable-yellow-peppers-bell-pepper-flowering-plant-yellow-pepper-land-plant-bell-peppers-and-chili-peppers-pimiento-habanero-chili-137913.jpg
Completed Image ====> 3. yellow-bell-pepper.jpg
Completed Image ====> 4. yellow_bell_pepper_group_store.jpg
Completed Image ====> 5. plant-fruit-food-produce-vegetable-yellow-peppers-bell-pepper-persimmon-diospyros-flowering-plant-sweet-pepper-yellow-pepper-land-plant-bell-peppers-and-chili-peppers-pimiento-habanero-chili-958689.jpg
Completed Image ====> 6. 2017-06-28-10-23-21.jpg
Completed Image ====> 7. yellow_bell_pepper_2017_a3.jpg
Completed Image ====> 8. 2017-06-26-12-06-35.jpg
Completed Image ====> 9. yellow-bell-pepper-1312593087h9f.jpg
Completed Image ====> 10. plant-fruit-food-pepper-produce-vegetable-macro-yellow-background-vegetables-peppers-bell-pepper-vitamins-flowering-plant-chili-pepper-annex-yellow-pepper-land-plant-bell-peppers-and-chili-peppers-pimiento-habanero-chili-1358020.jpg
Everything downloaded!
Total Errors: 0