2012-02-16 40 views
6

Tôi đang cố gắng lấy hình ảnh từ tìm kiếm Hình ảnh của Google cho một truy vấn cụ thể. Nhưng trang tôi tải xuống không có hình ảnh và nó chuyển hướng tôi đến trang gốc của Google. Đây là mã của tôi:Python: URL phù hợp để tải xuống hình ảnh từ Tìm kiếm Hình ảnh của Google

AGENT_ID = "Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1" 

GOOGLE_URL = "https://www.google.com/images?source=hp&q={0}" 

_myGooglePage = "" 

def scrape(self, theQuery) : 
    self._myGooglePage = subprocess.check_output(["curl", "-L", "-A", self.AGENT_ID, self.GOOGLE_URL.format(urllib.quote(theQuery))], stderr=subprocess.STDOUT) 
    print self.GOOGLE_URL.format(urllib.quote(theQuery)) 
    print self._myGooglePage 
    f = open('./../../googleimages.html', 'w') 
    f.write(self._myGooglePage) 

Tôi đang làm gì sai?

Cảm ơn

+1

ít nhất bạn phải đóng chốt xử lý –

+0

nó đã hoạt động! cảm ơn – lorussian

+0

@ silviolor: Tôi biết nó không giúp được vấn đề của bạn nhưng tại sao không sử dụng mô-đun 'urllib2' sẵn có của python thay vì' curl'. – RanRag

Trả lời

3

tôi sẽ cung cấp cho bạn một gợi ý ... bắt đầu ở đây:

https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=JULIE%20NEWMAR

đâu JULIE và Newmar là những thuật ngữ tìm kiếm của bạn.

Điều đó sẽ trả lại dữ liệu json bạn cần ... bạn sẽ cần phải phân tích rằng việc sử dụng json.load hoặc simplejson.load để lấy lại một dict ... sau đó lặn vào nó để tìm đầu tiên trả lời Data, sau đó là kết quả là danh sách chứa các mục riêng lẻ có url bạn sẽ muốn tải xuống.

Mặc dù tôi không đề xuất theo bất kỳ cách nào để thực hiện tìm kiếm tự động của Google, kể từ khi số (deprecated) API cho điều này cụ thể là không được.

+0

cảm ơn, cách này trông thực sự dễ dàng hơn. – lorussian

+0

Xin lưu ý, API này không còn khả dụng nữa. – prooffreader

3
+0

Xin chào, tập lệnh của bạn dường như đang sử dụng PIL. Thật không may tôi dường như có vấn đề HUGE trong cài đặt PIL trên máy tính này. Vì tôi chỉ cần những hình ảnh, mà không biến đổi chúng theo bất kỳ cách nào, liệu có cách nào để thoát khỏi mà không có nó? –

+0

Tôi không chắc chắn cách tránh PIL, nhưng tôi khuyên bạn nên sử dụng MacPorts nếu bạn đang sử dụng máy Mac để đơn giản hóa việc cài đặt gói và cài đặt PIL cho bạn. – crizCraig

+0

Hoặc tốt hơn, Homebrew: http://brew.sh/ –

6

Đây là mã bằng Python mà tôi sử dụng để tìm kiếm và tải hình ảnh từ Google, hy vọng nó sẽ giúp:

import os 
import sys 
import time 
from urllib import FancyURLopener 
import urllib2 
import simplejson 

# Define search term 
searchTerm = "hello world" 

# Replace spaces ' ' in search term for '%20' in order to comply with request 
searchTerm = searchTerm.replace(' ','%20') 


# Start FancyURLopener with defined version 
class MyOpener(FancyURLopener): 
    version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11' 
myopener = MyOpener() 

# Set count to 0 
count= 0 

for i in range(0,10): 
    # Notice that the start changes for each iteration in order to request a new set of images for each loop 
    url = ('https://ajax.googleapis.com/ajax/services/search/images?' + 'v=1.0&q='+searchTerm+'&start='+str(i*4)+'&userip=MyIP') 
    print url 
    request = urllib2.Request(url, None, {'Referer': 'testing'}) 
    response = urllib2.urlopen(request) 

    # Get results using JSON 
    results = simplejson.load(response) 
    data = results['responseData'] 
    dataInfo = data['results'] 

    # Iterate for each result and get unescaped url 
    for myUrl in dataInfo: 
     count = count + 1 
     print myUrl['unescapedUrl'] 

     myopener.retrieve(myUrl['unescapedUrl'],str(count)+'.jpg') 

    # Sleep for one second to prevent IP blocking from Google 
    time.sleep(1) 

Bạn cũng có thể tìm thấy thông tin rất hữu ích here.

+0

Có thể xác định loại hình ảnh tại địa chỉ đã cho cho Google – erogol

+0

Tôi chưa xem xét điều này trong một thời gian nhưng hãy kiểm tra API Google mới nhất. Tôi nghĩ câu trả lời là có, bạn có thể tinh chỉnh tìm kiếm của mình thành ".png", ".jpg" và thậm chí là định dạng dựa trên vectơ ".svg". –

0

tôi chỉ đang tham gia trả lời câu hỏi này, mặc dù nó cũ. có một cách đơn giản hơn nhiều để thực hiện việc này.

def google_image(x): 
     search = x.split() 
     search = '%20'.join(map(str, search)) 
     url = 'http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=%s&safe=off' % search 
     search_results = urllib.request.urlopen(url) 
     js = json.loads(search_results.read().decode()) 
     results = js['responseData']['results'] 
     for i in results: rest = i['unescapedUrl'] 
     return rest 

là vậy.

+0

đây là trong 3.x, do đó, thay thế urllib.request với urllib2 trong 2.x rõ ràng. – riyoken

Các vấn đề liên quan