pourquoi ne pouvais-je pas télécharger des images de google avec python?

9

Le code m'a aidé à télécharger un tas d'images de Google. Il fonctionnait il y a quelques jours et maintenant tout à coup, le code casse.

Code:

# importing google_images_download module 
from google_images_download import google_images_download  

# creating object 
response = google_images_download.googleimagesdownload()  

search_queries = ['Apple', 'Orange', 'Grapes', 'water melon'] 


def downloadimages(query): 
    # keywords is the search query 
    # format is the image file format 
    # limit is the number of images to be downloaded 
    # print urs is to print the image file url 
    # size is the image size which can 
    # be specified manually ("large, medium, icon") 
    # aspect ratio denotes the height width ratio 
    # of images to download. ("tall, square, wide, panoramic") 
    arguments = {"keywords": query, 
                 "format": "jpg", 
                 "limit":4, 
                 "print_urls":True, 
                 "size": "medium", 
                 "aspect_ratio": "panoramic"} 
    try: 
        response.download(arguments) 

    # Handling File NotFound Error     
    except FileNotFoundError:  
        arguments = {"keywords": query, 
                     "format": "jpg", 
                     "limit":4, 
                     "print_urls":True,  
                     "size": "medium"} 

        # Providing arguments for the searched query 
        try: 
            # Downloading the photos based 
            # on the given arguments 
            response.download(arguments)  
        except: 
            pass

# Driver Code 
for query in search_queries: 
    downloadimages(query)  
    print()

Journal de sortie:

Numéro d'article: 1 -> Nom de l'article = Apple Evaluating ... Démarrage du téléchargement ...

Malheureusement, les 4 n'ont pas pu être téléchargés car certaines images n'étaient pas téléchargeables. 0 est tout ce que nous avons obtenu pour ce filtre de recherche!

Erreurs: 0

Numéro d'article: 1 -> Nom de l'article = Orange Évaluation ... Démarrage du téléchargement ...

Malheureusement, les 4 n'ont pas pu être téléchargés car certaines images n'étaient pas téléchargeables. 0 est tout ce que nous avons obtenu pour ce filtre de recherche!

Erreurs: 0

Numéro d'article: 1 -> Nom de l'article = Évaluation des raisins ... Démarrage du téléchargement ...

Malheureusement, les 4 n'ont pas pu être téléchargés car certaines images n'étaient pas téléchargeables. 0 est tout ce que nous avons obtenu pour ce filtre de recherche!

Erreurs: 0

Numéro d'article: 1 -> Nom de l'article = melon d'eau Évaluation ... Démarrage du téléchargement ...

Malheureusement, les 4 n'ont pas pu être téléchargés car certaines images n'étaient pas téléchargeables. 0 est tout ce que nous avons obtenu pour ce filtre de recherche!

Erreurs: 0

Cela crée en fait un dossier mais pas d'images dedans.

Sai Krishnadas
la source
1
Je ne comprends pas pourquoi ce message a reçu 2 aversions?
Sai Krishnadas, le
1
J'ai aussi le même problème. Cela fonctionne bien quelques jours auparavant.
Amith

Réponses:

0

Il semble qu'il y ait un problème avec le package. Voir ces RP ouverts: PR1 et PR2

Ali Cirik
la source
Nous les avons visités depuis longtemps mais ne parvenons toujours pas à résoudre le problème
Sai Krishnadas
0

Je pense que Google change le DOM. L'élément class = "rg_meta notranslate" n'existe plus. Il est changé en class = "rg_i ..."


def get_soup(url,header):
    return BeautifulSoup(urllib2.urlopen(urllib2.Request(url,headers=header)),'html.parser')    

def main(args):
    query = "typical face"
    query = query.split()
    query = '+'.join(query)
    url = "https://www.google.co.in/search?q="+query+"&source=lnms&tbm=isch"
    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"
    soup = get_soup(url, headers)
    for a in soup.find_all("img", {"class": "rg_i"}):
        wget.download(a.attrs["data-iurl"], a.attrs["data-iid"])


if __name__ == '__main__':
    from sys import argv
    try:
        main(argv)
    except KeyboardInterrupt:
        pass
    sys.exit()
nguyentran
la source
Alors, comment puis-je les changer?
Sai Krishnadas
0

La raison pour laquelle cela ne fonctionne pas est que Google a changé la façon dont ils font tout pour que vous ayez maintenant besoin de la clé api_key incluse dans la chaîne de recherche. À la suite de ces packages tels que google-images-download ne fonctionnent plus même si vous utilisez la version 2.8.0 car ils n'ont pas d'espace réservé pour insérer la chaîne api_key que vous devez enregistrer auprès de Google pour obtenir vos 2500 téléchargements gratuits par jour.

Donc, la meilleure façon de le faire maintenant est d'utiliser le package pip google-search-results et de fournir votre api_key dans le cadre des paramètres de requête.

params = {
           "engine" : "google",
           ...
           "api_key" : "secret_api_key" 
}

où vous fournissez vous-même votre clé API, puis appelez:

client = GoogleSearchResults(params)
results = client.get_dict()

Cela renvoie une chaîne JSON avec le lien vers toutes les URL des images, puis vous les téléchargez directement.

Eamonn Kenny
la source
Où puis-je obtenir la clé API?
Sai Krishnadas