You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:45:01