如何通过上传图片 url 在 google 上进行反向图片搜索?

How to do reverse image search on google by uploading image url?

我的目标是自动化 google 反向图像搜索。

我想上传一张图片 url 并获取包含匹配图片的所有网站链接。

所以这是我到目前为止可以制作的:

import requests
import bs4

# Let's take a picture of Chicago
chicago = 'https://images.squarespace-cdn.com/content/v1/556e10f5e4b02ae09b8ce47d/1531155504475-KYOOS7EEGVDGMMUQQNX3/ke17ZwdGBToddI8pDm48kCf3-plT4th5YDY7kKLGSZN7gQa3H78H3Y0txjaiv_0fDoOvxcdMmMKkDsyUqMSsMWxHk725yiiHCCLfrh8O1z4YTzHvnKhyp6Da-NYroOW3ZGjoBKy3azqku80C789l0h8vX1l9k24HMAg-S2AFienIXE1YmmWqgE2PN2vVFAwNPldIHIfeNh3oAGoMooVv2g/Chi+edit-24.jpg'

# And let's take google image search uploader by url
googleimage = 'https://www.google.com/searchbyimage?&image_url='

# Here is our Chicago image url uploaded into google image search
url = googleimage+chicago

# And now let's request our Chichago google image search
response = requests.get(url)
soup = bs4.BeautifulSoup(response.text,'html.parser')

# Here is the output
print(soup.prettify())

我的问题是我没有预料到这个 print(soup.prettify()) 输出。 我没有在 post 中包含输出,因为它太长了。

如果您在浏览器中输入:

https://www.google.com/searchbyimage?&image_url=https://images.squarespace-cdn.com/content/v1/556e10f5e4b02ae09b8ce47d/1531155504475-KYOOS7EEGVDGMMUQQNX3/ke17ZwdGBToddI8pDm48kCf3-plT4th5YDY7kKLGSZN7gQa3H78H3Y0txjaiv_0fDoOvxcdMmMKkDsyUqMSsMWxHk725yiiHCCLfrh8O1z4YTzHvnKhyp6Da-NYroOW3ZGjoBKy3azqku80C789l0h8vX1l9k24HMAg-S2AFienIXE1YmmWqgE2PN2vVFAwNPldIHIfeNh3oAGoMooVv2g/Chi+edit-24.jpg

您会看到 html 代码与我们使用 soup 的输出有很大不同。

我期待 soup 代码有最终结果,这样我就可以解析我需要的链接。相反,我只得到了一些我不太了解的奇怪功能。

似乎 google 图片搜索是一个三步过程:首先你上传你的图片,然后用奇怪的函数发生一些事情,然后你得到你的最终结果。

如何才能像在浏览器中一样获得最终结果?所以我可以像往常一样解析 html 代码。

我来给你解释一下。

使用print(response.history) 并且 print(response.url

所以如果是200,那么你会得到一个url比如https://www.google.com/search?tbs=sbi:

但是如果是302,那么你会得到一个url比如hhttps://www.google.com/webhp?tbs=sbi:

对于 302 这意味着 Google 将您检测为 BOT 因此它被 webhp = Web Hidden Path 拒绝了您,它将请求转换为机器人检测并进一步从google方面分析。

您可以确认,如果您按下 link Click Here 并检查浏览器上会显示什么 bar

Which means that you need to consider header part in order to be on right track.

使用以下方式。

from bs4 import BeautifulSoup
import requests

headers = {
    'Host': 'www.google.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0',
    'Accept': '*/*',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'Referer': 'https://www.google.com/',
    'Origin': 'https://www.google.com',
    'Connection': 'keep-alive',
    'Content-Length': '0',
    'TE': 'Trailers'
}

r = requests.get("https://www.google.com/searchbyimage?image_url=https://images.squarespace-cdn.com/content/v1/556e10f5e4b02ae09b8ce47d/1531155504475-KYOOS7EEGVDGMMUQQNX3/ke17ZwdGBToddI8pDm48kCf3-plT4th5YDY7kKLGSZN7gQa3H78H3Y0txjaiv_0fDoOvxcdMmMKkDsyUqMSsMWxHk725yiiHCCLfrh8O1z4YTzHvnKhyp6Da-NYroOW3ZGjoBKy3azqku80C789l0h8vX1l9k24HMAg-S2AFienIXE1YmmWqgE2PN2vVFAwNPldIHIfeNh3oAGoMooVv2g/Chi+edit-24.jpg&encoded_image=&image_content=&filename=&hl=en", headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.prettify)