2014-04-24 29 views
5

का उपयोग कर Google रिवर्स छवि खोज मेरे पास एक ऐप है जो मूल रूप से मेरे स्थानीय ड्राइव पर संग्रहीत छवियों का डेटाबेस है। कभी-कभी मुझे एक उच्च रिज़ॉल्यूशन संस्करण या छवि के वेब स्रोत को खोजने की आवश्यकता होती है, और इसके लिए Google का reverse image search आदर्श है।POST अनुरोध

दुर्भाग्यवश, Google के पास इसके लिए कोई एपीआई नहीं है, इसलिए मुझे इसे मैन्युअल रूप से करने का एक तरीका पता लगाना पड़ा। अभी मैं सेलेनियम का उपयोग कर रहा हूं, लेकिन जाहिर है कि बहुत सारे ओवरहेड हैं। मुझे urllib2 या कुछ समान का उपयोग करके एक सरल समाधान चाहिए - एक POST अनुरोध भेजें, खोज यूआरएल वापस प्राप्त करें, और फिर मैं अपने यूआरएल को पहले से ही खोले गए सिस्टम ब्राउज़र में लोड करने के लिए webbrowser.open(url) पर पास कर सकता हूं।

यहाँ अभी मैं क्या उपयोग कर रहा हूँ है:

gotUrl = QtCore.pyqtSignal(str) 
filePath = "/mnt/Images/test.png" 

browser = webdriver.Firefox() 
browser.get('http://www.google.hr/imghp') 

# Click "Search by image" icon 
elem = browser.find_element_by_class_name('gsst_a') 
elem.click() 

# Switch from "Paste image URL" to "Upload an image" 
browser.execute_script("google.qb.ti(true);return false") 

# Set the path of the local file and submit 
elem = browser.find_element_by_id("qbfile") 
elem.send_keys(filePath) 

# Get the resulting URL and make sure it's displayed in English 
browser.get(browser.current_url+"&hl=en") 
try: 
    # If there are multiple image sizes, we want the URL for the "All sizes" page 
    elem = browser.find_element_by_link_text("All sizes") 
    elem.click() 
    gotUrl.emit(browser.current_url) 
except: 
    gotUrl.emit(browser.current_url) 
browser.quit() 
+0

यदि आप वाणिज्यिक हैं, तो TinEye एक अच्छा विकल्प है। यदि आप उन्हें कहीं भी यूआरएल 'www.google.com/searchbyimage अपलोड कर सकते हैं? Image_url = IMAGE_URL' उपयोगी होगा। – Others

उत्तर

8

यह करना आसान है अगर आप requests module स्थापित करने के लिए खुश हैं। रिवर्स इमेज सर्च वर्कफ़्लो में वर्तमान में एक अपलोड यूआरएल के लिए एक मल्टीपार्ट बॉडी के साथ एक एकल POST अनुरोध होता है, जिसकी प्रतिक्रिया वास्तविक परिणाम पृष्ठ पर रीडायरेक्ट होती है।

import requests 

filePath = '/mnt/Images/test.png' 
searchUrl = 'http://www.google.hr/searchbyimage/upload' 
multipart = {'encoded_image': (filePath, open(filePath, 'rb')), 'image_content': ''} 
response = requests.post(searchUrl, files=multipart, allow_redirects=False) 
fetchUrl = response.headers['Location'] 
webbrowser.open(fetchUrl) 
बेशक

याद रखें कि Google किसी भी बिंदु पर इस वर्कफ़्लो को बदलने का फैसला कर सकते हैं कि!

+1

इस उदाहरण कोड में एक अतिरिक्त जो याद किया गया था: 'आयात वेबब्रोसर' –

+0

उपर्युक्त उत्तर से वापस 'fetchUrl' वास्तव में फ़ज़ी मिलान द्वारा उत्पन्न छवि का एक उंगली प्रिंट है। – Tengerye

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