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)和学术文献调研场景尤其高效。


解决什么问题

  1. 跨数据库分散:PubMed、arXiv、bioRxiv 各有各的 API 和格式,手动切换极费时间。paperscraper 提供统一接口,一次查询可覆盖多个数据库。
  2. 文献计量分析缺乏工具:做 meta-analysis 需要批量获取引用数、期刊 IF、自引率,这个库开箱即用,无需自己写爬虫。
  3. arXiv API 速率限制:arXiv 官方 API 有严格速率限制,大量查询会被限流。paperscraper 支持预下载 xRxiv dump 本地搜索,绕过 API 限制。
  4. 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')

坑与注意

  1. xRxiv dump 首次下载耗时长:bioRxiv 全量 ~800 MB、下载 1 小时+,建议在稳定的网络环境下进行。下载完成后 paperscraper/server_dumps/ 目录会占用数 GB 空间。

  2. arXiv Kaggle 后端需要认证: bash kaggle auth login 没有 Kaggle 账号需要先注册(免费)。如不想注册,用 backend='api' 但会被速率限制。

  3. PDF 下载依赖出版社 OA 政策:非开放获取的论文无法通过 DOI 下载 PDF,返回 False。部分论文有多级 fallback(出版社 API → preprint server → Semantic Scholar),但仍不是 100% 覆盖。

  4. 自引率数据来自 Semantic Scholar:API 返回速度和稳定性取决于 Semantic Scholar 服务状态,大批量查询建议加 retry 参数。

  5. xRxiv 定时抓取需注意文件名冲突:使用 start_date / end_date 参数时,输出文件以当前日期命名,后续所有查询都基于这个文件。如需最新数据,需重新下载 dump。

  6. Python 版本要求:需要 Python ≥ 3.8,依赖 arxiv、pymed、scholarly 等包,与最新 Python 版本可能存在兼容性小版本问题。

  7. 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 获取)