【问题标题】:How to do reverse image search on google by uploading image url?如何通过上传图片网址在谷歌上进行反向图片搜索?
【发布时间】:2019-12-04 12:55:26
【问题描述】:

我的目标是自动化谷歌反向图片搜索。

我想上传一个图片 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())output。 我没有在帖子中包含输出,因为它太长了。

如果您在浏览器中输入:

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代码了。

【问题讨论】:

标签: python web-scraping google-image-search


【解决方案1】:

让我为你解释一下。

使用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 方面进一步分析。

您可以确认如果您按下链接Click Here 并检查浏览器上将显示的内容bar

这意味着您需要考虑标题部分才能走上正轨。

使用以下方式。

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)

【讨论】:

  • 确实我有一个 302 响应,它把我重定向到 webhp 而不是 search。那么我应该怎么做才能得到 200 响应而不是 302 呢?我应该如何处理我的标题?
  • 我试过你的代码。我在历史上仍然有一个 302 响应(而不是之前的两个 302)。当我打印soup。我得到了一些奇怪的字符和符号。知道为什么吗?
  • @RobZ 在这种情况下很好,因为您尝试了很多请求,所以我相信您被阻止了。我建议使用不同的使用代理来使用 tor
  • 你有什么资源可以让我做到这一点吗?
  • @RobZ 你可以使用谷歌图片搜索 API pypi.org/project/Google-Images-Search。或serpapi zenserp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多