【发布时间】:2021-11-07 15:33:23
【问题描述】:
我正在尝试根据输入的关键字从ACL website 获取一些文章。该网站使用 google 自定义搜索 API,API 的输出是一个 javascript 对象。
如何在 python 中解析返回的对象,并从该对象中获取研究论文的文章名称、URL 和摘要。
我用来获取文章的脚本:
import requests
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)
print(response.headers['Content-Type'])
# 'application/javascript; charset=utf-8'
输出如下所示:
'/*O_o*/\ngoogle.search.cse.api12760({\n "cursor": {\n "currentPageIndex": 0,\n "estimatedResultCount": "21600",\n "moreResultsUrl": "http://www.google.com/cse?oe=utf8&ie=utf8&source=uds&q=multi-label+text+classification&safe=off&sort=&cx=000299513257099441687:fkkgoogvtaw&start=0",\n "resultCount": "21,600",\n "searchResultTime": "0.16",\n "pages": [\n {\n "label": 1,\n "start": "0"\n },\n {\n "label": 2,\n "start": "10"\n },\n {\n "label":
虽然在启动search command时chrome的network选项卡中的输出是JSON:
如何从 python 中的 js 对象获取文章及其链接?
【问题讨论】:
-
希望这篇文章对你有帮助click here to navigate
-
也许如果你跳过
callback,那么它会以纯JSON的形式发送,你可以使用模块json将其转换为Python字典。此时您可以从字符串末尾删除/*O_o*/\ngoogle.search.cse.api12760(和);,您应该有JSON,您可以将其转换为Python 字典。 -
你真的需要抓取抽象部分吗?如果是这样,那么你可以使用 selenium 之类的自动化工具来做到这一点。因为 api 没有产生完整的数据。
标签: python python-3.x web-scraping python-requests