使用自定义搜索在 Python 中以编程方式搜索 google
问题:使用自定义搜索在 Python 中以编程方式搜索 google 我有一段使用 pygoogle python 模块的代码片段,它允许我以编程方式在 google 中简洁地搜索某些术语: g = pygoogle(search_term) g.pages = 1 results = g.get_urls()[0:10] 我刚刚发现这很遗憾已经停止,取而代之的是一种叫做谷歌自定义搜索的东西。我查
问题:使用自定义搜索在 Python 中以编程方式搜索 google
我有一段使用 pygoogle python 模块的代码片段,它允许我以编程方式在 google 中简洁地搜索某些术语:
g = pygoogle(search_term)
g.pages = 1
results = g.get_urls()[0:10]
我刚刚发现这很遗憾已经停止,取而代之的是一种叫做谷歌自定义搜索的东西。我查看了关于 SO 的其他相关问题,但没有找到任何我可以使用的东西。我有两个问题:
1)谷歌自定义搜索是否允许我完全按照我在上面三行中所做的事情?
2)如果是 - 我在哪里可以找到示例代码来完成我上面所做的事情?如果不是,那么我使用 pygoogle 做的事情的替代方法是什么?
解答
有可能做到这一点。设置......不是很简单,但最终结果是您可以使用几行代码从 python 搜索整个网络。
总共有3个主要步骤。
第一步:获取谷歌API密钥
pygoogle的页面状态:
不幸的是,Google 不再支持 SOAP API 进行搜索,也不再提供新的许可证密钥。简而言之,PyGoogle 在这一点上几乎已经死了。
您可以改用他们的 AJAX API。看看这里的示例代码:http://dcortesi.com/2008/05/28/google-ajax-search-api-example-python-code/
...但您实际上也不能使用 AJAX API。您必须获得 Google API 密钥。https://developers.google.com/api-client-library/python/guide/aaa_apikeys对于简单的实验使用,我建议使用“服务器密钥”。
第二步:设置自定义搜索引擎,以便您可以搜索整个网络
事实上,旧的 API 不可用。可用的最佳新 API 是自定义搜索。它似乎只支持在特定域内搜索,但是,在关注这个 SO answer之后,您可以搜索整个网络:
- 从 Google 自定义搜索主页 (http://www.google.com/cse/),单击创建自定义搜索引擎。
- 输入搜索引擎的名称和描述。
- 在定义您的搜索引擎下,在要搜索的站点框中,输入至少一个有效的 URL(现在,只需输入 www.anyurl.com 即可通过此屏幕。稍后会详细介绍)。
- 选择您想要的 CSE 版本并接受服务条款,然后单击下一步。选择所需的布局选项,然后单击下一步。
- 单击“后续步骤”部分下的任何链接以导航到您的控制面板。
- 在左侧菜单的控制面板下,单击基本信息。
- 在搜索首选项部分,选择搜索整个网络,但强调包含的站点。
- 单击保存更改。
- 在左侧菜单的控制面板下,单击站点。
- 删除您在初始设置过程中输入的站点。
谷歌也推荐这种方法:https://support.google.com/customsearch/answer/2631040
第三步:为 Python 安装 Google API 客户端
pip install google-api-python-client
,更多信息在这里:
-
repo:https://github.com/google/google-api-python-client
-
更多信息:https://developers.google.com/api-client-library/python/apis/customsearch/v1
-
完整文档:https://api-python-client-doc.appspot.com/
第四步(奖励):进行搜索
因此,在设置好之后,您可以从几个地方遵循代码示例:
-
简单示例:https://github.com/google/google-api-python-client/blob/master/samples/customsearch/main.py
-
cse()
函数文档:https://google-api-client-libraries.appspot.com/documentation/customsearch/v1/python/latest/customsearch_v1.cse.html
最后得到这个:
from googleapiclient.discovery import build
import pprint
my_api_key = "Google API key"
my_cse_id = "Custom Search Engine ID"
def google_search(search_term, api_key, cse_id, **kwargs):
service = build("customsearch", "v1", developerKey=api_key)
res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()
return res['items']
results = google_search(
'stackoverflow site:en.wikipedia.org', my_api_key, my_cse_id, num=10)
for result in results:
pprint.pprint(result)
经过一些调整后,您可以编写一些行为与您的代码片段完全相同的函数,但我将在此处跳过这一步。
更多推荐
所有评论(0)