使用自定义搜索以Python编程方式在Google中搜索谷歌

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个主要步骤.

第1步:获取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对于简单的实验用途,我建议使用"服务器密钥".

第2步:设置自定义搜索引擎,以便您可以搜索整个网络

实际上,旧的API不可用.可用的最佳新API是自定义搜索.它似乎只支持在特定域内搜索,但是,按照此SO答案后,您可以搜索整个网络:

  1. 在Google自定义搜索主页(http://www.google.com/cse/)中,单击"创建自定义搜索引擎".
  2. 输入搜索引擎的名称和说明.
  3. 在"定义您的搜索引擎"下的"要搜索的站点"框中,输入至少一个有效的URL(现在,只需将www.anyurl.com放到此屏幕即可.稍后详细介绍).
  4. 选择所需的CSE版本并接受服务条款,然后单击"下一步".选择所需的布局选项,然后单击"下一步".
  5. 单击"后续步骤"部分下的任何链接以导航到"控制"面板.
  6. 在左侧菜单中的"控制面板"下,单击"基本".
  7. 在"搜索首选项"部分中,选择"搜索整个Web"但强调包含的网站.
  8. 单击保存更改.
  9. 在左侧菜单中的"控制面板"下,单击"站点".
  10. 删除在初始设置过程中输入的站点.

Google还建议您采用这种方法:https://support.google.com/customsearch/answer/2631040

第3步:为Python安装Google API客户端

pip install google-api-python-client,更多信息在这里:

第四步(奖金):进行搜索

因此,在设置之后,您可以从几个地方跟踪代码示例:

并以此结束:

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)

经过一些调整后,您可以编写一些与您的代码段完全相同的函数,但我将在此处跳过此步骤.

  • `my_cse_id`可以从`https://cse.google.com/cse/setup/basic?cx= <my_cse_id>`找到,并将`%3A`替换为`:` (3认同)

小智 26

@mbdevpl\ 的回复对我帮助很大,所以所有功劳都归于他们。\n但是 UI 发生了一些变化,所以这里有一个更新:

\n\n

A. 安装 google-api-python-client

\n\n
    \n
  1. 如果您还没有 Google 帐户,请注册
  2. \n
  3. 如果您从未创建过 Google API 控制台项目,请阅读管理项目页面并在Google API 控制台中创建项目。
  4. \n
  5. 安装库。
  6. \n
\n\n

B. 创建 API 密钥:

\n\n
    \n
  1. 导航到Cloud Console 中的API 和服务\xe2\x86\x92Credentials面板。
  2. \n
  3. 选择创建凭据,然后从下拉菜单中选择API 密钥。
  4. \n
  5. API密钥创建对话框显示您新创建的密钥。
  6. \n
  7. 您现在拥有一个API_KEY
  8. \n
\n\n

C. 设置自定义搜索引擎,以便您可以搜索整个网络

\n\n
    \n
  1. 在此链接中创建自定义搜索引擎。
  2. \n
  3. 在要搜索的站点中,添加任何有效的 URL(即 www.stackoverflow.com)。
  4. \n
  5. 这\xe2\x80\x99就是你必须填写的所有内容,其余的\xe2\x80\x99并不重要。在左侧菜单中,单击编辑搜索引擎\xe2\x86\x92 {您的搜索引擎名称} \xe2\x86\x92设置
  6. \n
  7. “搜索整个网络”设置为“开”
  8. \n
  9. 从要搜索的站点列表中删除您添加的 URL 。
  10. \n
  11. 搜索引擎 ID下,您\xe2\x80\x99 将找到search-engine-ID
  12. \n
\n\n

搜索示例

\n\n
from 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)\n
Run 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

2020年的回答

由于某种原因,谷歌不再提供任何 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 结果中抓取数据?