2012-02-16 7 views
6

Próbuję uzyskać obrazy z wyszukiwarki Google Image dla konkretnego zapytania. Ale strona, którą pobieram, jest bez zdjęć i przekierowuje mnie do oryginalnej wersji Google. Oto mój kod:Python: właściwy adres URL do pobierania zdjęć z Wyszukiwarki grafiki 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) 

Co robię źle?

Dzięki

+1

przynajmniej musisz zamknąć uchwyt pliku –

+0

zadziałało! dzięki – lorussian

+0

@silviolor: Wiem, że to nie pomoże twój problem, ale dlaczego nie używać wbudowanego modułu python 'urllib2' zamiast' curl'. – RanRag

Odpowiedz

3

dam Ci podpowiedź ... Kliknij tutaj:

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

Gdzie Julie i Newmar są wyszukiwane hasła.

To zwróci dane json trzeba ... trzeba analizować, że za pomocą json.load lub simplejson.load wrócić dict ... następnie nurkowanie na to, aby znaleźć pierwszy lista odpowiedzi responseData, a następnie zawierająca poszczególne pozycje, których pobranie chcesz następnie pobrać.

Chociaż nie sugeruję w żaden sposób automatycznego zaśmwania Google, ponieważ ich (deprecated) API do tego wyraźnie mówi, aby nie.

+0

dzięki, ten sposób wygląda naprawdę łatwiej. – lorussian

+0

Uwaga: ten interfejs API nie jest już dostępny. – prooffreader

3
+0

Witaj, twój skrypt wydaje się używać PIL. Niestety wydaje mi się, że mam OGROMNE problemy z instalowaniem PIL na tym komputerze. Skoro tylko potrzebuję obrazów, bez ich transformacji, czy istnieje sposób, aby uciec bez niego? –

+0

Nie jestem pewien, jak uniknąć PIL, ale bardzo polecam MacPorts, jeśli używasz komputera Mac, aby uprościć instalację pakietu i zainstalować PIL dla ciebie. – crizCraig

+0

Lub lepiej, Homebrew: http://brew.sh/ –

6

Jest to kod w Pythonie, które mogę używać do wyszukiwania i pobierania zdjęć z Google, nadzieję, że pomoże:

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) 

Można również znaleźć bardzo użyteczne informacje here.

+0

Czy jest możliwe zdefiniowanie typu obrazu pod danym adresem URL do Google – erogol

+0

Nie patrzę na to przez chwilę, ale sprawdź najnowszy interfejs API Google. Myślę, że odpowiedź brzmi "tak", możesz zawęzić wyszukiwanie do ".png", ".jpg", a nawet do formatu wektorowego ".svg". –

0

Po prostu chcę odpowiedzieć na to pytanie, mimo że jest stary. jest o wiele prostszy sposób robienia tego.

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 

to jest to.

+0

to jest w 3.x, więc zamień urllib.request z urllib2 w 2.x oczywiście. – riyoken

Powiązane problemy