Google обратный поиск изображений с помощью POST-запроса

у меня есть приложение, которое в основном представляет собой базу данных изображений, хранящихся на моем локальном диске. Иногда мне нужно найти версию с более высоким разрешением или веб-Источник изображения и Google обратный поиск изображения идеально подходит для этого.

к сожалению, у Google нет API для этого, поэтому мне пришлось выяснить, как это сделать вручную. Прямо сейчас я использую селен, но это, очевидно, имеет много накладных расходов. Я хотел бы простое решение с помощью urllib2 или что-то подобное - отправьте запрос POST, получите URL-адрес поиска, а затем я могу просто передать этот URL в 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()

1 ответов


Это легко сделать, если вы счастливы, чтобы установить просит модуля. Рабочий процесс обратного поиска изображений в настоящее время состоит из одного запроса POST с составным телом на URL-адрес загрузки, ответом на который является перенаправление на страницу фактических результатов.

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 может решить изменить этот процесс в любой момент!