11

基本的に、ローカル ドライブに保存されている画像のデータベースであるアプリがあります。より高解像度のバージョンや画像の Web ソースを見つける必要がある場合があり、Google の逆画像検索は理想的です。

残念ながら、Google には API がないため、手動で行う方法を見つけなければなりませんでした。現在、私は Selenium を使用していますが、明らかに多くのオーバーヘッドがあります。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()
4

1 に答える 1

18

requests モジュールをインストールしてよければ、これは簡単です。画像逆検索ワークフローは現在、アップロード URL へのマルチパート ボディを含む単一の POST リクエストで構成されており、そのレスポンスは実際の結果ページへのリダイレクトです。

import requests
import webbrowser

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 はいつでもこのワークフローを変更する可能性があることを覚えておいてください!

于 2015-03-01T11:22:37.900 に答える