2012-02-16 16 views
6

से चित्र डाउनलोड करने का सही यूआरएल मैं एक विशिष्ट क्वेरी के लिए Google छवि खोज से छवियां प्राप्त करने का प्रयास कर रहा हूं। लेकिन जो पेज मैं डाउनलोड करता हूं वह चित्रों के बिना है और यह मुझे Google के मूल में रीडायरेक्ट करता है। यहां मेरा कोड है:पायथन: 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) 

मैं क्या गलत कर रहा हूं?

धन्यवाद

+1

कम से कम आपको फ़ाइल हैंडल –

+0

को बंद करना होगा! धन्यवाद – lorussian

+0

@ सिल्विओलर: मुझे पता है कि यह आपकी समस्या में मदद नहीं करता है, लेकिन क्यों 'curl' के बजाय पायथन के इनबिल्ट' urllib2' मॉड्यूल का उपयोग नहीं करते हैं। – RanRag

उत्तर

3

मैं तुम्हें एक संकेत दे देंगे ... यहाँ शुरू:

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

कहाँ जूली और नयामार अपने खोज शब्दों रहे हैं।

कि json डेटा आप की जरूरत वापस आ जाएगी ... आप यह पहली बार लगता है कि json.load या simplejson.load का उपयोग कर वापस एक dict ... डाइविंग के बाद प्राप्त करने के लिए पार्स करने के लिए की आवश्यकता होगी प्रतिक्रिया डेटा, तो परिणाम सूची जिसमें व्यक्तिगत आइटम शामिल हैं जिनके url आप फिर डाउनलोड करना चाहते हैं।

हालांकि मैं Google के स्वचालित स्क्रैपिंग को किसी भी तरह से सुझाव नहीं देता हूं, क्योंकि इसके (deprecated) API के लिए यह विशेष रूप से नहीं कहता है।

+0

धन्यवाद, इस तरह वास्तव में आसान लग रहा है। – lorussian

+0

कृपया ध्यान दें, यह API अब उपलब्ध नहीं है। – prooffreader

3
+0

हैलो, आपकी स्क्रिप्ट पीआईएल का उपयोग कर प्रतीत होती है। दुर्भाग्यवश मुझे इस मशीन पर पीआईएल स्थापित करने में बड़ी समस्याएं प्रतीत होती हैं। चूंकि मुझे छवियों की आवश्यकता है, उन्हें किसी भी तरह से बदलने के बिना, क्या इसके बिना दूर जाने का कोई तरीका है? –

+0

मुझे यकीन नहीं है कि पीआईएल से कैसे बचें, लेकिन यदि आप पैकेज स्थापना को सरल बनाने और आपके लिए पीआईएल स्थापित करने के लिए मैक का उपयोग कर रहे हैं तो मैकपॉर्ट्स की अत्यधिक अनुशंसा करता हूं। – crizCraig

+0

या बेहतर, होमब्रू: http://brew.sh/ –

6

यह अजगर में कोड है कि मैं खोज और Google से चित्रों को डाउनलोड करने का उपयोग है आशा है कि यह मदद करता है:

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) 

तुम भी बहुत उपयोगी जानकारी here पा सकते हैं।

+0

क्या यह Google – erogol

+0

पर दिए गए यूआरएल पर छवि प्रकार को परिभाषित करना संभव है, मैंने इसे थोड़ी देर तक नहीं देखा है लेकिन नवीनतम Google API की जांच करें। मुझे लगता है कि जवाब हां है, आप अपनी खोज को ".png", ".jpg", और यहां तक ​​कि वेक्टर आधारित प्रारूप ".svg" तक परिशोधित कर सकते हैं। –

0

मैं बस इसका उत्तर देने के लिए चिल्ला रहा हूं, भले ही यह पुराना हो। ऐसा करने के लिए जाने का एक बहुत आसान तरीका है।

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 

यह है।

+0

यह 3.x में है, इसलिए urllib.request को urllib2 के साथ 2.x में स्पष्ट रूप से बदलें। – riyoken

संबंधित मुद्दे