获得10多个结果Google自定义搜索API

时间:2019-04-26 11:01:14

标签: python google-custom-search

我正在尝试使用Google自定义搜索API,我想做的是搜索前20个结果,我尝试将URL中的num=10更改为20,但给出了400错误,如何修复或请求结果的第二页?(请注意,我正在整个网络搜索)

这是我正在使用的代码

import requests,json
url="https://www.googleapis.com/customsearch/v1?q=SmartyKat+Catnip+Cat+Toys&cx=012572433248785697579%3A1mazi7ctlvm&num=10&fields=items(link%2Cpagemap%2Ctitle)&key={YOUR_API_KEY}"
res=requests.get(url)
di=json.loads(res.text)

2 个答案:

答案 0 :(得分:0)

很遗憾,从Google自定义搜索API接收的结果不可能超过10个。但是,如果您希望获得更多结果,可以通过将start参数增加10来进行多次调用。

查看此链接:https://developers.google.com/custom-search/v1/using_rest#query-params

答案 1 :(得分:0)

接受的答案 https://stackoverflow.com/a/55866268/42346 中的信息是准确的。

下面是我在此答案 https://stackoverflow.com/a/37084643/42346 的第 4 步中作为该函数的扩展编写的 Python 函数,用于从 Google 搜索 API 返回最多 100 个结果。它为每个 API 调用将 start 参数增加 10,处理自动返回的结果数。例如,如果您请求 25 个结果,该函数将引发 3 个 API 调用:10 个结果、10 个结果和 5 个结果。

背景资料:
有关如何设置 Google 自定义搜索引擎的说明:https://stackoverflow.com/a/37084643/42346
有关如何指定它在此处搜索整个网络的更多详细信息: https://stackoverflow.com/a/11206266/42346

from googleapiclient.discovery import build
from pprint import pprint as pp
import math

def google_search(search_term, api_key, cse_id, **kwargs):
    service = build("customsearch", "v1", developerKey=api_key)
    
    num_search_results = kwargs['num']
    if num_search_results > 100:
        raise NotImplementedError('Google Custom Search API supports max of 100 results')
    elif num_search_results > 10:
        kwargs['num'] = 10 # this cannot be > 10 in API call 
        calls_to_make = math.ceil(num_search_results / 10)
    else:
        calls_to_make = 1
        
    kwargs['start'] = start_item = 1
    items_to_return = []
    while calls_to_make > 0:
        res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()
        items_to_return.extend(res['items'])
        calls_to_make -= 1
        start_item += 10
        kwargs['start'] = start_item
        leftover = num_search_results - start_item + 1
        if 0 < leftover < 10:
            kwargs['num'] = leftover
        
    return items_to_return 

以下是您如何称呼它的示例:

NUM_RESULTS = 25
MY_SEARCH = 'why do cats chase their own tails'
MY_API_KEY = 'Google API key'
MY_CSE_ID = 'Custom Search Engine ID'

results = google_search(MY_SEARCH, MY_API_KEY, MY_CSE_ID, num=NUM_RESULTS)
    
for result in results:
    pp(result)