почему я не мог загружать изображения из google с помощью python?

Код помог мне загрузить кучу изображений из Google. Раньше это работало несколько дней назад, а теперь вдруг код ломается.

Код:

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

Выходной журнал:

Номер позиции: 1 --> Название позиции = Apple Оценка... Начало загрузки...

К сожалению, все 4 не удалось загрузить, потому что некоторые изображения не загружались. 0 — это все, что мы получили для этого фильтра поиска!

Ошибки: 0

Номер позиции: 1 --> Название позиции = Оранжевый Оценка... Начало загрузки...

К сожалению, все 4 не удалось загрузить, потому что некоторые изображения не загружались. 0 — это все, что мы получили для этого фильтра поиска!

Ошибки: 0

Номер позиции: 1 --> Название позиции = Виноград Оценка... Начало загрузки...

К сожалению, все 4 не удалось загрузить, потому что некоторые изображения не загружались. 0 — это все, что мы получили для этого фильтра поиска!

Ошибки: 0

Артикул №: 1 --> Название артикула = арбуз Оценка... Начало загрузки...

К сожалению, все 4 не удалось загрузить, потому что некоторые изображения не загружались. 0 — это все, что мы получили для этого фильтра поиска!

Ошибки: 0

На самом деле создается папка, но в ней нет изображений.


person Sai Krishnadas    schedule 09.02.2020    source источник
comment
Я не понимаю, почему этот пост получил 2 дизлайка?   -  person Sai Krishnadas    schedule 09.02.2020
comment
У меня тоже такая же проблема. Он отлично работает за несколько дней до этого.   -  person Amith    schedule 26.02.2020


Ответы (5)



Проект google_images_download больше не совместим с Google API.

В качестве альтернативы вы можете попробовать simple_image_download.

person Kaustuv    schedule 20.08.2020

Похоже, проблема с пакетом. Посмотрите эти открытые PR: PR1 и PR2

person Ali Cirik    schedule 10.02.2020
comment
Посетил их давно, но до сих пор не смог решить проблему - person Sai Krishnadas; 11.02.2020

Я думаю, что Google меняет DOM. Элемент class="rg_meta notranslate" больше не существует. Он изменен на 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()
person nguyentran    schedule 20.02.2020
comment
Итак, как мне их изменить? - person Sai Krishnadas; 20.02.2020

Причина, по которой это не работает, заключается в том, что Google изменил то, как они все делают, так что теперь вам нужен ключ api_key, включенный в строку поиска. В результате этого пакеты, такие как google-images-download, больше не работают, даже если вы используете версию 2.8.0, потому что у них нет заполнителя для вставки строки api_key, которую вы должны зарегистрировать в Google, чтобы получить 2500 бесплатных загрузок в день.

Если вы готовы платить 50 долларов США в месяц или больше за доступ к сервису на serpapi.com, один из способов сделать это – использовать пакет pip google-search-results и указать свой ключ API как часть параметров запроса.

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

где вы сами предоставляете свой ключ API, а затем вызываете:

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

Это возвращает строку JSON со ссылкой на все URL-адреса изображений, а затем вы просто загружаете их напрямую.

person Eamonn Kenny    schedule 14.04.2020
comment
Где взять ключ API? - person Sai Krishnadas; 23.04.2020
comment
console.cloud.google.com. Вы должны предоставить свои данные для входа в Google и свою кредитную карту, но вы можете загружать 25000 элементов в день без взимания платы. Я использую его, но только сегодня я услышал, что github.com/joeclinton1 имеет свой собственный вариант код google_images_download, который позволяет загружать 100 изображений в день. - person Eamonn Kenny; 09.06.2020