use*_*453 43 python google-custom-search
我有一段使用pygoogle python模块的代码,它允许我以编程方式在google中搜索某些术语:
g = pygoogle(search_term)
g.pages = 1
results = g.get_urls()[0:10]
Run Code Online (Sandbox Code Playgroud)
我发现不幸的是,这已经停止了,取而代之的是谷歌自定义搜索.我查看了SO上的其他相关问题,但没有发现任何我可以使用的问题.我有两个问题:
1)谷歌自定义搜索是否允许我完成我在上面三行中所做的事情?
2)如果是 - 我在哪里可以找到示例代码来完成我上面所做的事情?如果没有,那么使用pygoogle做什么是替代方案?
mbd*_*vpl 87
有可能这样做.设置......不是很简单,但最终结果是你可以用几行代码从python中搜索整个web.
共有3个主要步骤.
该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答案后,您可以搜索整个网络:
- 在Google自定义搜索主页(http://www.google.com/cse/)中,单击"创建自定义搜索引擎".
- 输入搜索引擎的名称和说明.
- 在"定义您的搜索引擎"下的"要搜索的站点"框中,输入至少一个有效的URL(现在,只需将www.anyurl.com放到此屏幕即可.稍后详细介绍).
- 选择所需的CSE版本并接受服务条款,然后单击"下一步".选择所需的布局选项,然后单击"下一步".
- 单击"后续步骤"部分下的任何链接以导航到"控制"面板.
- 在左侧菜单中的"控制面板"下,单击"基本".
- 在"搜索首选项"部分中,选择"搜索整个Web"但强调包含的网站.
- 单击保存更改.
- 在左侧菜单中的"控制面板"下,单击"站点".
- 删除在初始设置过程中输入的站点.
Google还建议您采用这种方法:https://support.google.com/customsearch/answer/2631040
pip install google-api-python-client,更多信息在这里:
因此,在设置之后,您可以从几个地方跟踪代码示例:
简单示例: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)
Run Code Online (Sandbox Code Playgroud)
经过一些调整后,您可以编写一些与您的代码段完全相同的函数,但我将在此处跳过此步骤.
小智 26
@mbdevpl\ 的回复对我帮助很大,所以所有功劳都归于他们。\n但是 UI 发生了一些变化,所以这里有一个更新:
\n\nfrom googleapiclient.discovery import build\n\nmy_api_key = "AIbaSyAEY6egFSPeadgK7oS/54iQ_ejl24s4Ggc" #The API_KEY you acquired\nmy_cse_id = "012345678910111213141:abcdef10g2h" #The search-engine-ID you created\n\n\ndef google_search(search_term, api_key, cse_id, **kwargs):\n service = build("customsearch", "v1", developerKey=api_key)\n res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()\n return res[\'items\']\n\n\nresults = google_search(\'"god is a woman" "thank you next" "7 rings"\', my_api_key, my_cse_id, num=10)\nfor result in results:\n print(result)\nRun Code Online (Sandbox Code Playgroud)\n\n重要的!第一次运行时,您可能必须在您的帐户中启用 API。错误消息应包含启用 API 的链接。它类似于:\n https://console.developers.google.com/apis/api/customsearch.googleapis.com/overview?project= {您的项目姓名}。
\n\n你\xe2\x80\x99将被要求创建一个服务名称(\xe2\x80\x99是什么并不重要),并给它角色。\n我给了它角色查看器和服务使用管理员,它可以工作。
\n小智 8
由于某种原因,谷歌不再提供任何 API,但https://github.com/bisoncorps/search-engine-parser正在开发一个用于抓取谷歌的 python 包。
pip install search-engine-parser
Run Code Online (Sandbox Code Playgroud)
from search_engine_parser import GoogleSearch
def google(query):
search_args = (query, 1)
gsearch = GoogleSearch()
gresults = gsearch.search(*search_args)
return gresults['links']
google('Is it illegal to scrape google results')
Run Code Online (Sandbox Code Playgroud)
我不知道这有多合法,但只要您不将产品商业化,我认为您就可以逃脱惩罚。除了谷歌还没有因为使用他们的产品而真正起诉任何人,他们只是禁止了他们的 IP 地址。
如需更多信息,是否可以从 Google 结果中抓取数据?
| 归档时间: |
|
| 查看次数: |
40744 次 |
| 最近记录: |