Cette question a été posée à plusieurs reprises auparavant, mais toutes les réponses datent d'au moins quelques années et sont actuellement basées sur l'API ajax.googleapis.com, qui n'est plus prise en charge.

Quelqu'un connaît-il une autre façon? 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, basés sur le navigateur ou complémentaires pour le faire, qui ont tous échoué.

Merci!

15
xanderflood 5 mars 2016 à 06:16

11 réponses

Meilleure réponse

Utilisez la recherche personnalisée Google pour ce que vous voulez réaliser. Voir la réponse @ i08in de "Python - Télécharger des images à partir de google Image search? "il a une grande description, des exemples de scripts et des références de bibliothèques.

Bonne chance!

6
Community 23 mai 2017 à 12:02

J'ai utilisé ce script pour télécharger des images de la recherche google et je les ai utilisées pour ma formation mes classificateurs le code ci-dessous peut télécharger 100 images liées à la requête

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
2
rishabhr0y 28 août 2016 à 23:24

Pour améliorer un peu la réponse de Ravi Hirani, la manière la plus simple est de procéder comme suit:

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)

Source: https://pypi.org/project/icrawler/

3
Soumya Boral 22 juil. 2018 à 08:59

Pour tirer le meilleur parti de googleimagedownload, utilisez pip3 install pour l'obtenir, puis utilisez l'encapsuleur suivant pour le transformer en API. Fondamentalement, vous pouvez voir que j'ai dit dans le code de télécharger 10 grandes images marquées avec une étiquette pour réutilisation (mal orthographié par les auteurs originaux). Si je ne passe pas un argument de say -k = "poivron jaune", il téléchargera 10 images de poivron rouge par défaut. Vous pouvez modifier les arguments par défaut dans le dictionnaire googleImageDownloader que j'ai fourni à tout ce que vous voulez tant qu'ils sont 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 lance juste l'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
0
Eamonn Kenny 23 mars 2018 à 13:39

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 tonne de filtres pour personnaliser votre recherche


Si vous souhaitez télécharger plus de 100 images par mot clé , vous devez installer "sélénium" avec "chromedriver".

Si vous avez installé la bibliothèque par pip ou exécuté le fichier setup.py, Selenium se serait installé automatiquement sur votre machine. Vous aurez également besoin du navigateur Chrome sur votre ordinateur. Pour chromedriver:

Téléchargez le bon chromedriver en fonction de votre système d'exploitation.

Sous Windows ou MAC si, pour une raison quelconque, le chromedriver vous pose problème, téléchargez-le dans le répertoire actuel et exécutez la commande.

Sur Windows cependant, le chemin d'accès à chromedriver doit être donné au format suivant:

C: \ complete \ path \ to \ chromedriver.exe

Sous Linux, si vous rencontrez des problèmes lors de l'installation du navigateur Google Chrome, reportez-vous à ce guide CentOS ou Amazon Linux ou au guide Ubuntu.

Pour tous les systèmes d'exploitation, vous devrez utiliser l'argument '--chromedriver' ou '-cd' pour spécifier le chemin du chromedriver que vous avez téléchargé sur votre machine.

3
Vishal Gupta 13 août 2018 à 18:07

Une solution simple à ce problème consiste à installer un package python appelé google_images_download

pip install google_images_download

Utiliser ce code python

from google_images_download import google_images_download  

response = google_images_download.googleimagesdownload()
keywords = "apple fruit"
arguments = {"keywords":keywords,"limit":20,"print_urls":True}
paths = response.download(arguments)
print(paths)

Ajustez la limite pour contrôler le nombre d'images à télécharger

mais certaines images ne s'ouvriront pas car elles pourraient être corrompues

Changez la chaîne keywords pour obtenir la sortie dont vous avez besoin

0
Avin_ash 25 juin 2019 à 19:09

J'essaie cette bibliothèque qui peut être utilisée à la fois: un outil de ligne de commande ou une bibliothèque python. Il 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 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 outil de ligne de commande, comme suit:

$ googleimagesdownload --k "car" -sk 'red,blue,white' -l 10

Vous pouvez l'installer avec pip install google_images_download

1
Rodrigo Laguna 24 sept. 2018 à 15:49

J'ai essayé de nombreux 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 j'ai utilisé icrawler

Tout d'abord, vous devez télécharger icrawler dans votre système .

Exécutez ensuite sous le code.

from icrawler.examples import GoogleImageCrawler
google_crawler = GoogleImageCrawler()
google_crawler.crawl(keyword='krishna', max_num=100)

Remplacez keyword krishna par le texte souhaité.

Remarque : - l'image téléchargée doit avoir un chemin. En ce moment, j'ai utilisé le même répertoire où le script était placé. Vous pouvez définir un répertoire personnalisé via le code ci-dessous.

google_crawler = GoogleImageCrawler('path_to_your_folder')
0
Ravi Hirani 23 juil. 2018 à 05:18

Vous devez utiliser l'API de recherche personnalisée. Il existe un explorateur pratique ici. J'utilise urllib2. Vous devez également créer une clé API pour votre application à partir de la console développeur.

0
Lincoln Lorscheider 5 mars 2016 à 04:25

Pour télécharger un nombre quelconque 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 __name__ == "__main__":
    main()

Le code complet est ici.

6
atif93 30 juil. 2017 à 03:47

Assurez-vous d'installer d'abord la bibliothèque icrawler, utilisez.

pip install icrawler
from icrawler.builtin import GoogleImageCrawler
google_Crawler = GoogleImageCrawler(storage = {'root_dir': r'write the name of the directory you want to save to here'})
google_Crawler.crawl(keyword = 'sad human faces', max_num = 800)
1
Ru Chern Chong 2 déc. 2019 à 17:02