jannisborn/paperscraper · 上手攻略
- 仓库:jannisborn/paperscraper
- 链接:https://github.com/jannisborn/paperscraper
- 分类:学术工具 · 文献计量
- 作者:Tom
- 更新:2026-08-27
这是什么
jannisborn/paperscraper 是一个 Python 文献计量工具包,用于抓取学术论文元数据(PubMed、arXiv、bioRxiv、medRxiv、chemRxiv)、下载全文(PDF/XML)、查询引用数、Google Scholar 指标、期刊影响因子,并支持自引率分析。
核心解决的问题:把散落在多个预印本服务器和文献数据库的论文元数据,统一用 Python 接口批量抓取,省去手动复制粘贴;对文献计量学分析(meta-analysis)和学术文献调研场景尤其高效。
解决什么问题
- 跨数据库分散:PubMed、arXiv、bioRxiv 各有各的 API 和格式,手动切换极费时间。paperscraper 提供统一接口,一次查询可覆盖多个数据库。
- 文献计量分析缺乏工具:做 meta-analysis 需要批量获取引用数、期刊 IF、自引率,这个库开箱即用,无需自己写爬虫。
- arXiv API 速率限制:arXiv 官方 API 有严格速率限制,大量查询会被限流。paperscraper 支持预下载 xRxiv dump 本地搜索,绕过 API 限制。
- PDF 获取繁琐:知道 DOI 却找不到 PDF?paperscraper 支持 DOI → PDF 直接下载,带多级 fallback 机制。
快速安装
pip install paperscraper
# 或
uv add paperscraper
安装后直接 import 即可使用 PubMed、arXiv、Google Scholar 查询:
from paperscraper import dump_queries
# 示例:AI + 量子计算 + 化学的交叉研究
ai = ["Artificial intelligence", "Machine learning"]
qc = ["Quantum computing", "Quantum information"]
chemistry = ["Chemistry", "Chemical", "Molecule"]
dump_queries([[ai, qc, chemistry]], "output.jsonl")
外层列表 = AND 组合,内层列表 = OR 同义词。
核心用法
1. PubMed 论文搜索
from paperscraper.pubmed import get_and_dump_pubmed_papers
get_and_dump_pubmed_papers(
[["AI", "Machine learning"]],
"ai_papers.jsonl"
)
输出为 JSONL 格式(每行一篇论文),包含标题、摘要、作者、期刊、DOI 等字段。
2. 预印本服务器(xRxiv)本地 Dump
⚠️ 首次使用需下载完整历史数据,文件较大:
from paperscraper.get_dumps import biorxiv, medrxiv, chemrxiv, arxiv
# bioRxiv:~450K 论文,下载约 1 小时,~800 MB
biorxiv()
# medRxiv:~100K 论文,约 5 分钟,~200 MB
medrxiv()
# chemRxiv:~50K 论文,约 15 分钟,~30 MB
chemrxiv()
# arXiv(默认用 Kaggle 后端,全量下载):
arxiv(start_date='2019-01-01', end_date='2026-12-31')
下载后需重启 Python 解释器以加载新数据文件。
arXiv 小批量查询(推荐不需要全量时):
from paperscraper.arxiv import get_and_dump_arxiv_papers
# 使用 arXiv API 后端,不下载全量,适合少量查询
get_and_dump_arxiv_papers(
keywords=[["AI", "Machine learning"]],
start_date='2024-01-01',
end_date='2024-01-04',
backend='api' # 注意:API 后端速率受限
)
3. PDF 下载
from paperscraper.pdf import save_pdf
# 通过 DOI 下载 PDF
result = save_pdf({"doi": "10.48550/arXiv.2207.03928"}, filepath="paper.pdf")
# 返回 True 表示下载成功
⚠️ 注意:PDF 下载依赖出版社是否开放获取,部分论文需要机构订阅或付费才能下载全文。
4. 引用数与期刊影响因子
from paperscraper.citations import get_citations_by_doi
from paperscraper.impact import Impactor
# 获取 DOI 论文的引用数
citations = get_citations_by_doi("10.1021/acs.jcim.3c00132")
print(citations) # 输出:12
# 查询期刊影响因子
Impactor().search("Nat Comms", threshold=85, sort_by="impact")
# 返回:Nature Communications, IF=15.7
5. 自引率分析
# 详见 https://jannisborn.github.io/paperscraper/examples/self-citation-analysis/
# 支持作者级和论文级自引率计算
典型适用场景
| 场景 | 推荐功能 |
|---|---|
| 系统性文献综述(SLR) | dump_queries + PubMed/arXiv 多源搜索 |
| 某领域论文趋势分析 | 定时抓取 + 绘制发表量曲线 |
| 批量获取论文 PDF | save_pdf + DOI 列表 |
| 期刊影响因子查询 | Impactor |
| 自引率研究 | self_citation_analysis |
| arXiv 全量本地检索 | arxiv(backend='kaggle') |
坑与注意
-
xRxiv dump 首次下载耗时长:bioRxiv 全量 ~800 MB、下载 1 小时+,建议在稳定的网络环境下进行。下载完成后
paperscraper/server_dumps/目录会占用数 GB 空间。 -
arXiv Kaggle 后端需要认证:
bash kaggle auth login没有 Kaggle 账号需要先注册(免费)。如不想注册,用backend='api'但会被速率限制。 -
PDF 下载依赖出版社 OA 政策:非开放获取的论文无法通过 DOI 下载 PDF,返回
False。部分论文有多级 fallback(出版社 API → preprint server → Semantic Scholar),但仍不是 100% 覆盖。 -
自引率数据来自 Semantic Scholar:API 返回速度和稳定性取决于 Semantic Scholar 服务状态,大批量查询建议加
retry参数。 -
xRxiv 定时抓取需注意文件名冲突:使用
start_date/end_date参数时,输出文件以当前日期命名,后续所有查询都基于这个文件。如需最新数据,需重新下载 dump。 -
Python 版本要求:需要 Python ≥ 3.8,依赖
arxiv、pymed、scholarly等包,与最新 Python 版本可能存在兼容性小版本问题。 -
Google Scholar 抓取受 robots.txt 限制:大规模引用数查询可能被 Google Scholar 阻断,建议加延迟或使用 Semantic Scholar 作为替代数据源。
与同类对比
| 工具 | 支持数据库 | PDF 下载 | 引用数 | 本地 dump | 适用场景 |
|---|---|---|---|---|---|
| paperscraper | PubMed + 4 个预印本服务器 | ✅ DOI fallback | ✅ Scholar + IF | ✅ | 文献计量 meta-analysis |
| Scopus API | 商业数据库 | ❌ | ✅ | ❌ | 机构用户 |
| Semantic Scholar API | arXiv 为主 | 部分 | ✅ | ❌ | 快速单篇查询 |
| bibtex parser | 任意 .bib | ❌ | ❌ | ❌ | 文献管理 |
| researchpy | PubMed | ❌ | 部分 | ❌ | 统计分析 |
paperscraper 的差异化在于跨预印本服务器统一接口 + 本地 dump 加速批量查询,在系统性文献综述场景下效率最高。
一句话推荐结论
做学术文献调研或 meta-analysis 时,paperscraper 的多库统一接口 + 本地 dump 跳过 API 速率限制,是目前开源工具里最高效的组合方案——尤其是需要同时跑 PubMed 和多个预印本服务器的场景。
原始 commit:https://github.com/jannisborn/paperscraper/commits/main(SHA:需 clone 后 git rev-parse HEAD 获取)