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

get more than 10 results Google custom search API

我正在尝试使用 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)

遗憾的是,无法从 Google 自定义搜索 API 中收到超过 10 个结果。但是,如果您确实想要更多结果,可以通过将 start 参数增加 10 来进行多次调用。

看到这个link:https://developers.google.com/custom-search/v1/using_rest#query-params

接受的答案中的信息 是准确的。

下面是我写的 Python 函数,作为此答案第 4 步中函数的扩展 到 return 来自 [=30= 的最多 100 个结果] 搜索 API。对于每个 API 调用,它都会将 start 参数增加 10,从而自动将结果数处理为 return。例如,如果您请求 25 个结果,该函数将引发 3 API 次调用:10 个结果、10 个结果和 5 个结果。

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

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)