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