使用 Python 在 Yandex 图像中反向搜索图像

Pla*_*sky 8 python parsing web-crawler yandex

我对自动化反向图像搜索感兴趣。Yandex 尤其适合捕杀鲶鱼,甚至比 Google 图片还要好。因此,请考虑以下 Python 代码:

import requests
import webbrowser

try:
    filePath = "C:\\path\\whateverThisIs.png"
    searchUrl = 'https://yandex.ru/images/'
    multipart = {'encoded_image': (filePath, open(filePath, 'rb')), 'image_content': ''}
    response = requests.post(searchUrl, files=multipart, allow_redirects=False)
    #fetchUrl = response.headers['Location']
    print(response)
    print(dir(response))
    print(response.content)
    input()
except Exception as e:
    print(e)
    print(e.with_traceback)
    input()```
Run Code Online (Sandbox Code Playgroud)

脚本失败并显示 KeyError,'location'未找到。我知道代码会起作用,因为如果您替换它searchUrlhttp://www.google.hr/searchbyimage/upload那么脚本会返回正确的 url。因此,简而言之,预期结果将是带有图像搜索的 url。实际上,我们得到了一个 KeyError ,该 url 应该存储在其中。显然,Yandex 的工作方式并不完全相同,可能 url 已关闭(尽管我尝试了大量变体)或者原因可能完全不同。

无论如何,非常感谢帮助解决这个问题!

小智 8

您可以使用此代码通过图像搜索获取 url。适用于 ubuntu 18.04,使用 python 3.7 和 requests 2.23.0

import json

import requests

filePath = "C:\\path\\whateverThisIs.png"
searchUrl = 'https://yandex.ru/images/search'
files = {'upfile': ('blob', open(filePath, 'rb'), 'image/jpeg')}
params = {'rpt': 'imageview', 'format': 'json', 'request': '{"blocks":[{"block":"b-page_type_search-by-image__link"}]}'}
response = requests.post(searchUrl, params=params, files=files)
query_string = json.loads(response.content)['blocks'][0]['params']['url']
img_search_url= searchUrl + '?' + query_string
print(img_search_url)
Run Code Online (Sandbox Code Playgroud)