2012-06-28 56 views
8

Tôi đang gặp khó khăn trong việc tìm kiếm tìm kiếm hình ảnh của google bằng python. Tôi cần phải làm điều đó bằng cách sử dụng các thư viện python chuẩn (vì vậy urllib, urllib2, json, ..)tìm kiếm python với hình ảnh google image

Ai đó có thể giúp đỡ? Giả sử hình ảnh là jpeg.jpg và nằm trong cùng thư mục tôi đang chạy python.

Tôi đã thử một trăm phiên bản mã khác nhau, sử dụng các header, user-agent, mã hóa base64, url khác nhau (images.google.com, http://images.google.com/searchbyimage?hl=en&biw=1060&bih=766&gbv=2&site=search&image_url= {{URL Để hình ảnh của bạn}} & sa = X & ei = H6RaTtb5JcTeiALlmPi2CQ & ved = 0CDsQ9Q8, vv ....)

Không có gì hoạt động, nó luôn luôn là một lỗi, 404, 401 hoặc đường ống bị hỏng :(

Xin chỉ cho tôi một số kịch bản python mà thực sự sẽ Kết hình ảnh google với riêng tôi hình ảnh dưới dạng dữ liệu tìm kiếm ('jpeg.jpg' được lưu trữ trên máy tính/thiết bị của tôi)

.210

Cảm ơn bạn đã bất cứ ai có thể giải quyết này,

Dave :)

+0

Nó có lẽ không phải tất cả những gì ngạc nhiên khi Google là tốt hơn ở ngăn cản bạn từ cào các trang của họ hơn bạn đang phá vỡ sự bảo vệ của họ. – geoffspear

+0

Không, nhiều hơn là tôi không hiểu urllib2. Cho dù tôi tìm kiếm bằng trình duyệt, hoặc bởi python thông qua điện thoại Android của tôi, tôi có thể đăng bài mà không có lỗi đôi khi, nhưng nhận được kết quả tôi chỉ không 'hiểu. Tôi đã nghiên cứu urllib2 trong nhiều ngày và có vẻ như tất cả mọi nơi, có mimetypes, tiêu đề, nhiều loại urllib .. sau đó có thay đổi công thức ... và chưa có hướng dẫn sử dụng urllib, hoặc urllib2, đúng cách . Có rất nhiều bài đăng trực tuyến .. nhưng mỗi bài đều khác nhau. ví dụ: đây là bài đăng được dịch lên google translate: – user1488252

+0

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

Trả lời

2

tôi sử dụng đoạn mã sau để tìm kiếm hình ảnh của Google và tải về những hình ảnh vào máy tính của tôi bằng Python:

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ó thể cũng tìm thấy thông tin rất hữu ích here.

+1

dữ liệu đôi khi có thể là Không. – itsuper7

+8

Làm thế nào điều này có được upvoted? Nó không trả lời câu hỏi của OP cả. Câu hỏi là "Hãy chỉ cho tôi một số tập lệnh python sẽ thực sự tìm kiếm hình ảnh google ** với hình ảnh của riêng tôi làm dữ liệu tìm kiếm ('jpeg.jpg' được lưu trữ trên máy tính/thiết bị của tôi) **". – Natsukane

+2

Cũng giống như ghi chú, lưu hình ảnh từ tìm kiếm trên google bằng API của họ là vi phạm trực tiếp các điều khoản và dịch vụ của họ được nêu ra [tại đây] (https://developers.google.com/image-search/terms) –

1

API Tìm kiếm Hình ảnh của Google bị phản đối, chúng tôi sử dụng google tìm kiếm để tải về những hình ảnh sử dụng regex và súp đẹp

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() 
Các vấn đề liên quan