wake-up-neo.com

Warum konnte ich mit Python keine Bilder von Google herunterladen?

Der Code hat mir geholfen, eine Reihe von Bildern von Google herunterzuladen. Früher hat es vor ein paar Tagen funktioniert und jetzt bricht plötzlich der Code.

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()

Ausgabeprotokoll:

Artikel-Nr.: 1 -> Artikelname = Apple Evaluating ... Download starten ...

Leider konnten nicht alle 4 heruntergeladen werden, da einige Bilder nicht heruntergeladen werden konnten. 0 ist alles was wir für diesen Suchfilter haben!

Fehler: 0

Artikel-Nr.: 1 -> Artikelname = Orange Auswerten ... Download starten ...

Leider konnten nicht alle 4 heruntergeladen werden, da einige Bilder nicht heruntergeladen werden konnten. 0 ist alles was wir für diesen Suchfilter haben!

Fehler: 0

Artikel-Nr.: 1 -> Artikelname = Trauben bewerten ... Download starten ...

Leider konnten nicht alle 4 heruntergeladen werden, da einige Bilder nicht heruntergeladen werden konnten. 0 ist alles was wir für diesen Suchfilter haben!

Fehler: 0

Artikel-Nr.: 1 -> Artikelname = Wassermelone Auswertung ... Download starten ...

Leider konnten nicht alle 4 heruntergeladen werden, da einige Bilder nicht heruntergeladen werden konnten. 0 ist alles was wir für diesen Suchfilter haben!

Fehler: 0

Dies erstellt tatsächlich einen Ordner, aber keine Bilder darin.

9
Sai Krishnadas

Ich denke, Google ändert das DOM. Das Element class = "rg_meta notranslate" existiert nicht mehr. Es wird in class = "rg_i ..." geändert.


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()
1
nguyentran

In der Tat ist das Problem vor nicht allzu langer Zeit aufgetreten, es gibt bereits eine Reihe ähnlicher Github-Probleme:

Leider gibt es keine offizielle Lösung. Derzeit können Sie die temporäre Lösung verwenden, die in den Diskussionen bereitgestellt wurde.

0
funnydman

Der Grund, warum dies nicht funktioniert, ist, dass Google die Art und Weise geändert hat, in der alles ausgeführt wird, sodass Sie jetzt den in der Suchzeichenfolge enthaltenen api_key benötigen. Infolgedessen funktionieren Pakete wie Google-Images-Download nicht mehr, selbst wenn Sie die Version 2.8.0 verwenden, da sie keinen Platzhalter zum Einfügen der Zeichenfolge api_key haben, die Sie bei Google registrieren müssen, um Ihre 2500 kostenlosen Downloads pro Tag zu erhalten.

Wenn Sie bereit sind, 50 USD pro Monat oder mehr für den Zugriff auf einen Dienst von serpapi.com zu zahlen, können Sie dazu das pip-Paket google-search-results Verwenden und Ihren api_key als Teil bereitstellen der Abfrageparameter.

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

wo Sie Ihren API-Schlüssel selbst bereitstellen und dann aufrufen:

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

Dies gibt eine JSON-Zeichenfolge mit dem Link zu allen Bild-URLs zurück und Sie laden sie einfach direkt herunter.

0
Eamonn Kenny