파이썬으로 Google에서 이미지를 다운로드 할 수없는 이유는 무엇입니까?


9

이 코드는 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

이것은 실제로 폴더를 생성하지만 이미지는 포함하지 않습니다.


1
이 게시물이 2 개의 싫어하는 이유를 이해하지 못합니까?
사이 Krishnadas

1
나도 같은 문제가 있습니다. 며칠 전에 잘 작동합니다.
Amith

답변:



0

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

어떻게 변경합니까?
사이 Krishnadas


0

이것이 작동하지 않는 이유는 Google이 검색 문자열에 포함 된 api_key가 필요하도록 모든 작업 방식을 변경했기 때문입니다. google-images-download와 같은이 패키지의 결과로 2.8.0 버전을 사용하더라도 api_key 문자열을 삽입 할 자리 표시자가 없어서 하루에 2500 번 무료 다운로드하려면 Google에 등록해야하므로 더 이상 작동하지 않습니다.

따라서이 작업을 수행하는 가장 좋은 방법은 pip 패키지 google-search-results를 사용하고 쿼리 매개 변수의 일부로 api_key를 제공하는 것입니다.

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

API 키를 직접 제공 한 후 다음을 호출하십시오.

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

모든 이미지 URL에 대한 링크가 포함 된 JSON 문자열을 반환 한 다음 직접 다운로드하면됩니다.


API 키는 어디서 구할 수 있습니까?
사이 Krishnadas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.