2012-06-28 25 views
8

Mam bardzo trudny czas wyszukiwania google wyszukiwania obrazu z Pythona. Muszę to zrobić używając tylko standardowych bibliotek Pythona (tak urllib, urllib2, json, ..)wyszukiwanie python obrazem google images

Czy ktoś może pomóc? Załóżmy, że obraz jest jpeg.jpg i znajduje się w tym samym folderze, z którego korzystam z Pythona.

Próbowałem sto różnych wersji kodu, przy użyciu nagłówków, user-agent, kodowanie base64, różne adresy URL (images.google.com, http://images.google.com/searchbyimage?hl=en&biw=1060&bih=766&gbv=2&site=search&image_url= {{URL do obrazu}} & sa = X & ei = H6RaTtb5JcTeiALlmPi2CQ & ved = 0CDsQ9Q8, etc ....)

Nic nie działa, to zawsze błąd, 404, 401 lub rury złamane :(

Proszę pokazać mi jakiś skrypt Pythona, który będzie rzeczywiście wyszukiwanego google obrazy z własną rękę obraz jako dane wyszukiwania ("jpeg.jpg" przechowywane na moim komputerze/urządzeniu)

Dziękuję za kogo może rozwiązać ten problem,

Dave :)

+0

To chyba nie tak zaskakujące, że Google jest lepiej Cię powstrzymuje od skrobania ich strony niż ty obchodzą ich ochronę. – geoffspear

+0

Nie, to bardziej, że po prostu nie rozumiem urllib2. Niezależnie od tego, czy wyszukiwać przez przeglądarkę, czy przez pythona przez mój telefon z Androidem, mogę pisać bez błędów, ale uzyskanie wyniku po prostu nie rozumiem. Uczę się teraz urllib2 od kilku dni i wydaje mi się, że jest wszędzie, są mimetypy, nagłówki, kilka odmian urllib ... to jest zmieniona receptura ... a jednak nie ma instrukcji jak poprawnie używać urllib lub urllib2 . Jest wiele postów online, ale każdy jest inny. na przykład jeden z wpisów do przetłumaczenia google: – user1488252

+0

https://bitbucket.org/vgavro/google_translate/src/19807740244a/google_translate.py – user1488252

Odpowiedz

2

używam następujący kod w Pythonie do wyszukiwania obrazów Google i pobrać obrazy do mojego komputera:

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) 

Mona również znaleźć bardzo przydatne informacje here.

+1

dane czasami mogą być Brakujące. – itsuper7

+8

Jak to się stało, że zostało ono przegłosowane? W ogóle nie odpowiada na pytanie PO. Pytanie brzmiało: "Proszę pokazać mi skrypt w języku Python, który rzeczywiście będzie wyszukiwał obrazy Google ** z moim własnym obrazem, jako dane wyszukiwania (" jpeg.jpg "przechowywane na moim komputerze/urządzeniu) **". – Natsukane

+2

Także jako notatkę, zapisywanie obrazów z wyszukiwarki Google za pomocą ich API jest bezpośrednim pogwałceniem ich warunków i usług [tutaj] (https://developers.google.com/image-search/terms) –

1

Google Image Search API jest przestarzała, używamy wyszukiwarki Google, aby pobrać obrazy przy użyciu regex i piękne zupę

from bs4 import BeautifulSoup 
import requests 
import re 
import urllib2 
import os 


def get_soup(url,header): 
    return BeautifulSoup(urllib2.urlopen(urllib2.Request(url,headers=header))) 

image_type = "Action" 
# you can change the query for the image here 
query = "Terminator 3 Movie" 
query= query.split() 
query='+'.join(query) 
url="https://www.google.co.in/searches_sm=122&source=lnms&tbm=isch&sa=X&ei=4r_cVID3NYayoQTb4ICQBA&ved=0CAgQ_AUoAQ&biw=1242&bih=619&q="+query 

print url 
header = {'User-Agent': 'Mozilla/5.0'} 
soup = get_soup(url,header) 

images = [a['src'] for a in soup.find_all("img", {"src": re.compile("gstatic.com")})] 
#print images 
for img in images: 
    raw_img = urllib2.urlopen(img).read() 
    #add the directory for your image here 
    DIR="C:\Users\hp\Pictures\\valentines\\" 
    cntr = len([i for i in os.listdir(DIR) if image_type in i]) + 1 
    print cntr 
    f = open(DIR + image_type + "_"+ str(cntr)+".jpg", 'wb') 
    f.write(raw_img) 
    f.close() 
Powiązane problemy