Tại sao tôi không thể tải xuống hình ảnh từ google với python?


9

Mã này đã giúp tôi tải xuống hàng loạt hình ảnh từ google. Nó được sử dụng để làm việc một vài ngày trước và bây giờ tất cả các mã đột ngột bị phá vỡ.

Mã số:

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

Nhật ký đầu ra:

Mục số: 1 -> Tên mục = Đánh giá Apple ... Bắt đầu tải xuống ...

Thật không may, cả 4 không thể tải xuống vì một số hình ảnh không thể tải xuống. 0 là tất cả những gì chúng tôi có cho bộ lọc tìm kiếm này!

Lỗi: 0

Mục số: 1 -> Tên mục = Đánh giá màu cam ... Bắt đầu tải xuống ...

Thật không may, cả 4 không thể tải xuống vì một số hình ảnh không thể tải xuống. 0 là tất cả những gì chúng tôi có cho bộ lọc tìm kiếm này!

Lỗi: 0

Mục số: 1 -> Tên mục = Đánh giá nho ... Bắt đầu tải xuống ...

Thật không may, cả 4 không thể tải xuống vì một số hình ảnh không thể tải xuống. 0 là tất cả những gì chúng tôi có cho bộ lọc tìm kiếm này!

Lỗi: 0

Mục số: 1 -> Tên mục = dưa hấu Đánh giá ... Bắt đầu tải xuống ...

Thật không may, cả 4 không thể tải xuống vì một số hình ảnh không thể tải xuống. 0 là tất cả những gì chúng tôi có cho bộ lọc tìm kiếm này!

Lỗi: 0

Điều này thực sự tạo ra một thư mục nhưng không có hình ảnh trong đó.


1
Tôi không hiểu tại sao bài đăng này có 2 không thích?
Sai Krishnadas

1
Tôi cũng có vấn đề tương tự. Nó hoạt động tốt vài ngày trước.
Amith

Câu trả lời:


0

Có vẻ như có một vấn đề với gói. Xem các PR mở này: PR1PR2


Đã đến thăm họ từ lâu nhưng vẫn không thể giải quyết được vấn đề
Sai Krishnadas

0

Tôi nghĩ rằng Google đang thay đổi DOM. Lớp phần tử = "rg_meta notranslate" không còn tồn tại. Nó được đổi thành 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()

Vì vậy, làm thế nào để tôi thay đổi chúng?
Sai Krishnadas

0

Thật vậy, vấn đề đã xuất hiện cách đây không lâu, đã có một loạt các vấn đề tương tự của Github:

Thật không may, không có giải pháp chính thức, hiện tại, bạn có thể sử dụng giải pháp tạm thời được cung cấp trong các cuộc thảo luận.


0

Lý do điều này không hoạt động là vì google đã thay đổi cách họ làm mọi thứ để bây giờ bạn cần api_key có trong chuỗi tìm kiếm. Do các gói này, chẳng hạn như google-hình ảnh-tải xuống không còn hoạt động ngay cả khi bạn sử dụng phiên bản 2.8.0 vì chúng không có trình giữ chỗ để chèn chuỗi api_key mà bạn phải đăng ký với Google để nhận 2500 lượt tải xuống miễn phí mỗi ngày.

Vì vậy, cách tốt nhất để thực hiện việc này là sử dụng gói pip google-search-results và cung cấp api_key của bạn như một phần của thông số truy vấn.

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

nơi bạn tự cung cấp khóa API và sau đó gọi:

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

Điều này trả về một chuỗi JSON có liên kết đến tất cả các url hình ảnh và sau đó bạn chỉ cần tải chúng trực tiếp.


Tôi lấy khóa API ở đâu?
Sai Krishnadas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.