使用自定义搜索在Python中以编程方式搜索Google
问题内容:
我有一个使用pygoogle python模块的代码段,可让我以编程方式在Google中简洁地搜索某些术语:
g = pygoogle(search_term)
g.pages = 1
results = g.get_urls()[0:10]
我只是发现不幸的是,它已被终止,并被称为Google自定义搜索的东西所代替。我查看了有关SO的其他相关问题,但没有找到我可以使用的任何东西。我有两个问题:
1)谷歌自定义搜索是否允许我准确地完成上述三行内容?
2)如果是-我在哪里可以找到示例代码来完全完成上述操作?如果没有,那么使用pygoogle可以做什么呢?
问题答案:
可以这样做。设置不是很简单,但是最终结果是您可以用几行代码从python搜索整个网络。
共有3个主要步骤。
第一步:获取Google 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是“自定义搜索”。它似乎仅支持在特定域内搜索,但是,在按照以下方式进行回答之后,您可以搜索整个网络:
1.
在Google自定义搜索首页(http://www.google.com/cse/)中,单击创建自定义搜索引擎。
2. 输入搜索引擎的名称和描述。
3.
在“定义您的搜索引擎”下的“要搜索的网站”框中,输入至少一个有效的URL(现在,只需输入www.anyurl.com即可跳过此屏幕。稍后将详细介绍)。
4. 选择所需的CSE版本并接受服务条款,然后单击“下一步”。选择所需的布局选项,然后单击“下一步”。
5. 单击“下一步”部分下的任何链接,以导航到“控制面板”。
6. 在左侧菜单的“控制面板”下,单击“基本”。
7. 在“搜索首选项”部分中,选择“搜索整个网络,但强调包含的网站”。
8. 单击保存更改。
9. 在左侧菜单的“控制面板”下,单击“站点”。
10. 删除您在初始设置过程中输入的站点。
Google也推荐这种方法:https
:
//support.google.com/customsearch/answer/2631040
第三步:安装适用于Python的Google API客户端
pip install google-api-python-client
,更多信息在这里:
- 回购: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)
进行一些调整后,您可以编写一些功能与代码片段完全一样的函数,但是我将在此处跳过此步骤。