Python调用谷歌搜索API遇参数错误,求非自定义搜索替代API
首先处理TypeError错误
那个错误提示TypeError: google_searchS() takes 3 positional arguments but 4 were given其实很好理解,咱们来拆解一下:
当你用self.google_searchS(...)调用方法时,Python会自动把self(当前类的实例)作为第一个参数传递给方法。这意味着你手动传入的3个参数(搜索关键词、API密钥、CSE ID)加上自动传入的self,总共是4个参数,但你的google_searchS方法定义只接受3个位置参数,所以就报错了。
解决方法分两种情况:
如果
google_searchS是类里的实例方法:检查方法定义,确保它包含self作为第一个参数,并且后面还有三个参数(对应你传入的内容)。比如正确的定义应该是:def google_searchS(self, query, api_key, cse_id): # 这里写你的搜索逻辑这样调用
self.google_searchS('stackoverflow wikipedia.org', my_api_key, my_cse_id)就完全匹配参数数量了。如果
google_searchS是普通函数或者静态方法:那你调用的时候不该加self.,直接调用函数即可。同时方法定义里不要加self参数:# 方法定义 def google_searchS(query, api_key, cse_id): # 搜索逻辑实现 # 调用方式 results = google_searchS('stackoverflow wikipedia.org', my_api_key, my_cse_id)
关于非自定义搜索的谷歌普通搜索API
很遗憾,谷歌已经没有公开的普通网页搜索API了——之前的Google Web Search API早在多年前就被弃用了。现在官方唯一提供的网页搜索相关API就是你正在尝试的Google Custom Search API,哪怕你把自定义搜索引擎设置为"搜索整个网页"(在CSE控制台里可以开启这个选项),它本质上还是基于自定义搜索框架的。
如果你的需求是不需要依赖CSE的话,有两个替代方向可以考虑:
- 使用第三方封装的搜索服务:有些服务商提供了基于谷歌搜索结果的API接口,不过这些通常会有调用次数限制或收费要求。
- 小规模非商用场景下的网页抓取:你可以用Python的请求库(比如requests)结合解析库(比如BeautifulSoup)来抓取谷歌搜索结果页面,但一定要严格遵守谷歌的
robots.txt协议和服务条款,频繁抓取很容易被封禁IP,需要谨慎使用。
内容的提问来源于stack exchange,提问作者Minions

