用于“谷歌以图搜图”的Python脚本

8 投票
3 回答
7419 浏览
提问于 2025-04-17 07:34

我查了一下谷歌搜索的API,发现他们并没有发布可以用来搜索“图片”的API。所以,我在想有没有什么Python脚本或者库,可以让我自动化实现“通过图片搜索”的功能。

3 个回答

-1

你可以试试这个链接:https://developers.google.com/image-search/v1/jsondevguide#json_snippets_python。虽然这个内容已经不再更新了,但看起来还是能用。

3

目前没有可用的API,但你可以解析网页,模拟浏览器的行为。不过我不太清楚你需要解析多少数据,因为谷歌可能会限制或阻止访问。

你可以通过使用urllib并设置正确的请求头来模拟浏览器。如果你觉得用Python解析复杂的网页有点困难,可以直接使用一个无头浏览器,比如phantomjs。在浏览器里,用JavaScript和DOM获取正确的元素是非常简单的。

在尝试这些之前,记得先查看一下谷歌的服务条款

3

这件事让我觉得挺烦的,所以我想在搜索“脚本谷歌图片搜索”时,看到的第一个与Python有关的StackOverflow帖子上留个评论。最让人烦的是在谷歌的网页界面上设置你的应用程序和自定义搜索引擎(CSE)。不过,一旦你拿到你的API密钥和CSE,就可以在你的环境中定义它们,然后做一些像下面这样的事情:

#!/usr/bin/env python

# save top 10 google image search results to current directory
# https://developers.google.com/custom-search/json-api/v1/using_rest

import requests
import os
import sys
import re
import shutil

url = 'https://www.googleapis.com/customsearch/v1?key={}&cx={}&searchType=image&q={}'
apiKey = os.environ['GOOGLE_IMAGE_APIKEY']
cx = os.environ['GOOGLE_CSE_ID']
q = sys.argv[1]

i = 1
for result in requests.get(url.format(apiKey, cx, q)).json()['items']:
  link = result['link']
  image = requests.get(link, stream=True)
  if image.status_code == 200:
    m = re.search(r'[^\.]+$', link)
    filename = './{}-{}.{}'.format(q, i, m.group())
    with open(filename, 'wb') as f:
      image.raw.decode_content = True
      shutil.copyfileobj(image.raw, f)
    i += 1

撰写回答