如何用Python解析谷歌自定义搜索返回的JS对象并提取ACL文献信息
解决方案
你拿到的是JSONP格式响应,原因是请求参数里携带了callback字段,谷歌自定义搜索会把JSON结果包裹在你指定的回调函数里返回,浏览器端可直接执行回调获取数据,这就是你看到的JS对象格式。
方案1:直接请求纯JSON(推荐)
最简单的方式是直接删除请求参数里的callback项,谷歌CSE接口会直接返回标准JSON格式,不需要额外处理字符串:
import requests import json params = ( ('rsz', 'filtered_cse'), ('num', '10'), ('hl', 'en'), ('source', 'gcsc'), ('gss', '.com'), ('cselibv', 'cc267ab8871224bd'), ('cx', '000299513257099441687:fkkgoogvtaw'), ('q', 'multi-label text classification'), ('safe', 'off'), ('cse_tok', 'AJvRUv1dd6NHqw5GKAoRSg3lLILE:1636278007905'), ('sort', ''), ('exp', 'csqr,cc,4618906'), # 移除原有的callback参数 ) response = requests.get('https://cse.google.com/cse/element/v1', params=params) # 直接解析为JSON字典 res_json = response.json() # 提取论文的标题、链接、摘要 papers = [] for item in res_json.get('results', []): papers.append({ 'title': item.get('title'), 'url': item.get('link'), 'abstract': item.get('snippet') }) # 输出测试 for paper in papers: print(f"标题:{paper['title']}") print(f"链接:{paper['url']}") print(f"摘要:{paper['abstract']}\n")
方案2:处理现有JSONP响应
如果需要保留callback参数,也可以手动裁剪响应文本,提取出中间的JSON部分再解析:
import requests import json # 保留原有所有参数 params = ( ('rsz', 'filtered_cse'), ('num', '10'), ('hl', 'en'), ('source', 'gcsc'), ('gss', '.com'), ('cselibv', 'cc267ab8871224bd'), ('cx', '000299513257099441687:fkkgoogvtaw'), ('q', 'multi-label text classification'), ('safe', 'off'), ('cse_tok', 'AJvRUv1dd6NHqw5GKAoRSg3lLILE:1636278007905'), ('sort', ''), ('exp', 'csqr,cc,4618906'), ('callback', 'google.search.cse.api12760'), ) response = requests.get('https://cse.google.com/cse/element/v1', params=params) content = response.text # 裁剪JSONP内容,提取纯JSON字符串 start_idx = content.find('(') + 1 end_idx = content.rfind(')') json_str = content[start_idx:end_idx] res_json = json.loads(json_str) # 提取论文信息的逻辑和方案1完全一致 papers = [] for item in res_json.get('results', []): papers.append({ 'title': item.get('title'), 'url': item.get('link'), 'abstract': item.get('snippet') })
注意事项
- 参数中的
cse_tok存在有效期,过期后需要重新从浏览器请求中抓取新值,否则接口会返回错误。 - 更换搜索关键词仅需修改
q参数的取值即可。
内容的提问来源于stack exchange,提问作者Aaditya Ura
相关产品推荐
相关产品推荐

