如何通过上传图片链接在谷歌上进行反向图片搜索?

2024-04-20 12:09:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是自动谷歌反向图像搜索。你知道吗

我想上传一个图像网址,并获得所有的网站链接,包括匹配的图像。你知道吗

以下是我目前能做的:

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())输出。 因为太长了,所以我没有把输出包括在帖子里。你知道吗

如果在浏览器中键入:

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代码有最终的结果,这样我就可以解析我需要的链接了。相反,我只得到了一些奇怪的功能,我真的不明白。你知道吗

谷歌图片搜索似乎是一个三步走的过程:首先你上传你的图片,然后发生一些奇怪的功能,然后你得到你的最终结果。你知道吗

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


Tags: 代码https图像imageimportcomurlsearch
1条回答
网友
1楼 · 发布于 2024-04-20 12:09:48

让我给你解释一下。你知道吗

使用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这意味着谷歌检测到你是一个BOT,因此它被webhp = Web Hidden Path拒绝了,它将请求转换为机器人检测,并由谷歌方面进一步分析。你知道吗

您可以确认,如果您按下链接Click Here,并检查浏览器bar上将显示什么。你知道吗

enter image description here

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)

相关问题 更多 >