关于 alterlab-biorxiv
alterlab-biorxiv 是使用 bioRxiv 免密 API 搜索和获取生命科学预印本的 Python 工具。它支持按关键词、作者、日期和学科筛选,可返回结构化元数据并下载 PDF。
主要功能
- 01按关键词和作者搜索预印本
- 02按日期范围及学科筛选
- 03通过 DOI 获取论文详情
- 04下载预印本 PDF
- 05以 JSON 输出检索结果
适用场景
- 01检索特定主题的近期生命科学预印本
- 02追踪作者在指定时期的预印本
- 03整理系统性预印本文献综述
- 04下载论文全文用于分析
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-biorxiv安装后在 Claude Code 中输入/alterlab-biorxiv确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/api_reference.mdscripts/biorxiv_search.py详细介绍
bioRxiv 数据库
概览
基于无需密钥的 bioRxiv API 提供 Python 工具,用于搜索和检索生命科学预印本。可按关键词、作者、日期范围和类别搜索,并返回结构化 JSON(标题、摘要、DOI、作者、版本),还可下载全文 PDF。
对于已发表且经过同行评审的文献,请使用 alterlab-pubmed;对于计算机科学/物理/数学预印本,请使用 alterlab-arxiv。bioRxiv 仅涵盖生物学主题。同一 API 也服务于 medRxiv(在端点路径中将 biorxiv 替换为 medrxiv,例如 /details/medrxiv/2025-03-21/2025-03-28?category=cardiovascular%20medicine);随附脚本针对 bioRxiv,因此如需查询 medRxiv,请直接使用 curl/requests。
工作原理(及其限制)
bioRxiv 的 /details 端点按日期范围返回预印本,每页 30 条记录。它接受服务端主题类别筛选器(?category=cell_biology),但不支持关键词或作者筛选。因此,此工具会:
- 对日期范围分页(沿游标继续检索,直到获取所有记录),并向服务端传递
--category,以便只获取该主题的记录;然后 - 在客户端按关键词(标题/摘要中的子字符串)和作者(作者列表中的子字符串)进行筛选。
这意味着日期范围越大,API 调用越多,下载量也越大。请尽可能缩小日期范围,并使用 --category(减少 API 调用)和 --limit 限定工作量。
何时使用此技能
适用于以下情况:
- 搜索特定研究领域的近期生命科学预印本
- 跟踪特定作者的预印本
- 开展系统性预印本文献综述
- 分析一段时间内的预印本趋势
- 获取用于引文管理的元数据
- 下载预印本 PDF 以供分析
- 按 bioRxiv 主题类别筛选论文
不适用的情况
| 场景 | 改用 |
|---|---|
| 经过同行评审且已编入 MeSH 索引的生物医学期刊文章 | alterlab-pubmed |
| arXiv 上的计算机科学/物理/数学/定量生物学预印本 | alterlab-arxiv |
| 预印本的引文数量或跨出版商文献计量数据 | alterlab-openalex |
| 存放自己的预印本(服务选择、许可、版本管理) | alterlab-preprint-deposition |
| 使用 PRISMA 筛选的多数据库系统性综述 | alterlab-literature-review |
运行脚本
脚本唯一的依赖项是 requests。使用 uv 运行脚本,即可即时安装该依赖项:
uv run --with requests scripts/biorxiv_search.py --help
下文的 python scripts/biorxiv_search.py ... 调用仅为简写;请替换为 uv run --with requests scripts/biorxiv_search.py ...(或启用已安装 requests 的环境)。
核心搜索功能
1. 关键词搜索
搜索标题、摘要或作者列表中包含特定关键词的预印本。
基本用法:
python scripts/biorxiv_search.py \
--keywords "CRISPR" "gene editing" \
--start-date 2024-01-01 \
--end-date 2024-12-31 \
--output results.json
使用类别筛选器:
python scripts/biorxiv_search.py \
--keywords "neural networks" "deep learning" \
--days-back 180 \
--category neuroscience \
--output recent_neuroscience.json
搜索字段:
关键词匹配不区分大小写,并按子字符串匹配;只要论文中找到任意一个关键词,就会匹配(OR 语义,而非 AND)。默认情况下,会在标题和摘要中搜索关键词。使用 --search-fields 自定义:
python scripts/biorxiv_search.py \
--keywords "AlphaFold" \
--search-fields title \
--days-back 365
2. 作者搜索
在指定日期范围内查找某位作者的所有论文。
基本用法:
python scripts/biorxiv_search.py \
--author "Smith" \
--start-date 2023-01-01 \
--end-date 2024-12-31 \
--output smith_papers.json
近期发表的论文:
# Last year by default if no dates specified
python scripts/biorxiv_search.py \
--author "Johnson" \
--output johnson_recent.json
3. 日期范围搜索
检索在指定日期范围内发布的所有预印本。
基本用法:
python scripts/biorxiv_search.py \
--start-date 2024-01-01 \
--end-date 2024-01-31 \
--output january_2024.json
使用类别筛选器:
python scripts/biorxiv_search.py \
--start-date 2024-06-01 \
--end-date 2024-06-30 \
--category genomics \
--output genomics_june.json
按天数回溯快捷方式:
# Last 30 days
python scripts/biorxiv_search.py \
--days-back 30 \
--output last_month.json
4. 按 DOI 获取论文详情
获取特定预印本的详细元数据。bioRxiv DOI 有两个前缀:
旧版预印本使用 10.1101/…,自迁移至
openRxiv(2025 年 12 月)后发布的预印本使用 10.64898/…,例如 10.64898/2026.08.28.747819。两个前缀都可用于 /details/
和 www.biorxiv.org/content/ URL;无论前缀为何,脚本都会规范化 DOI、doi.org 链接和
内容 URL。不要在正则表达式或验证器中将 10.1101 写死。
基本用法:
python scripts/biorxiv_search.py \
--doi "10.1101/2024.01.15.123456" \
--output paper_details.json
支持完整 DOI URL(任一前缀):
python scripts/biorxiv_search.py \
--doi "https://doi.org/10.64898/2026.08.28.747819"
5. 下载 PDF
下载任意预印本的全文 PDF。
基本用法:
python scripts/biorxiv_search.py \
--doi "10.1101/2024.01.15.123456" \
--download-pdf paper.pdf
批量处理: 对于多个 PDF,请从搜索结果 JSON 中提取 DOI,并下载每篇论文:
import json
from biorxiv_search import BioRxivSearcher
# Load search results
with open('results.json') as f:
data = json.load(f)
searcher = BioRxivSearcher(verbose=True)
# Download each paper
for i, paper in enumerate(data['results'][:10]): # First 10 papers
doi = paper['doi']
searcher.download_pdf(doi, f"papers/paper_{i+1}.pdf")
有效类别
按 bioRxiv 学科类别筛选搜索结果:
animal-behavior-and-cognitionbiochemistrybioengineeringbioinformaticsbiophysicscancer-biologycell-biologyclinical-trialsdevelopmental-biologyecologyepidemiologyevolutionary-biologygeneticsgenomicsimmunologymicrobiologymolecular-biologyneurosciencepaleontologypathologypharmacology-and-toxicologyphysiologyplant-biologyscientific-communication-and-educationsynthetic-biologysystems-biologyzoology
输出格式
所有搜索都会返回具有以下格式的结构化 JSON:
{
"query": {
"keywords": ["CRISPR"],
"start_date": "2024-01-01",
"end_date": "2024-12-31",
"category": "genomics"
},
"result_count": 42,
"results": [
{
"doi": "10.1101/2024.01.15.123456",
"title": "Paper Title Here",
"authors": "Smith, J.; Doe, J.; Johnson, A.",
"author_corresponding": "Smith J",
"author_corresponding_institution": "University Example",
"date": "2024-01-15",
"version": "1",
"type": "new results",
"license": "cc_by",
"category": "genomics",
"abstract": "Full abstract text...",
"pdf_url": "https://www.biorxiv.org/content/10.1101/2024.01.15.123456v1.full.pdf",
"html_url": "https://www.biorxiv.org/content/10.1101/2024.01.15.123456v1",
"jatsxml": "https://www.biorxiv.org/content/...",
"published": ""
}
]
}
常见用法模式
文献综述工作流
- 广泛关键词搜索:
python scripts/biorxiv_search.py \
--keywords "organoids" "tissue engineering" \
--start-date 2023-01-01 \
--end-date 2024-12-31 \
--category bioengineering \
--output organoid_papers.json
- 提取并审阅结果:
import json
with open('organoid_papers.json') as f:
data = json.load(f)
print(f"Found {data['result_count']} papers")
for paper in data['results'][:5]:
print(f"\nTitle: {paper['title']}")
print(f"Authors: {paper['authors']}")
print(f"Date: {paper['date']}")
print(f"DOI: {paper['doi']}")
- 下载选定论文:
from biorxiv_search import BioRxivSearcher
searcher = BioRxivSearcher()
selected_dois = ["10.1101/2024.01.15.123456", "10.1101/2024.02.20.789012"]
for doi in selected_dois:
filename = doi.replace("/", "_").replace(".", "_") + ".pdf"
searcher.download_pdf(doi, f"papers/{filename}")
趋势分析
通过分析不同时间段的发表频率来跟踪研究趋势:
python scripts/biorxiv_search.py \
--keywords "machine learning" \
--start-date 2020-01-01 \
--end-date 2024-12-31 \
--category bioinformatics \
--output ml_trends.json
然后分析结果中的时间分布。
作者跟踪
监测特定研究人员的预印本:
# Track multiple authors (each run scans the whole window, so keep it short)
for author in Smith Johnson Williams; do
python scripts/biorxiv_search.py \
--author "$author" \
--days-back 365 \
--output "${author}_papers.json"
done
Python API 用法
对于更复杂的工作流,可直接导入并使用 BioRxivSearcher 类:
from scripts.biorxiv_search import BioRxivSearcher
# Initialize
searcher = BioRxivSearcher(verbose=True)
# Multiple search operations
keywords_papers = searcher.search_by_keywords(
keywords=["CRISPR", "gene editing"],
start_date="2024-01-01",
end_date="2024-12-31",
category="genomics"
)
author_papers = searcher.search_by_author(
author_name="Smith",
start_date="2023-01-01",
end_date="2024-12-31"
)
# Get specific paper details
paper = searcher.get_paper_details("10.1101/2024.01.15.123456")
# Download PDF
success = searcher.download_pdf(
doi="10.1101/2024.01.15.123456",
output_path="paper.pdf"
)
# Format results consistently
formatted = searcher.format_result(paper, include_abstract=True)
最佳实践
-
缩小日期范围:由于筛选在客户端进行,工具会先对整个日期范围进行分页(每页 30 条记录),然后再筛选。繁忙的一周约有 800 篇预印本(约需调用 API 27 次);整整一年则有数万篇。请缩小日期范围,或使用
--days-back搜索近期内容。 -
按类别筛选:已知主题时,请使用
--category。该参数会发送到服务端(?category=),因此既能缩小结果集,也能减少 API 调用次数(繁忙的一周:总体约 1,270 篇预印本,而细胞生物学领域约 80 篇)。 -
使用
--limit限制结果:对于纯日期范围搜索,--limit也会提前停止分页,因此确实能减少 API 调用。对于关键词或作者搜索,必须先扫描整个日期范围,因此--limit只会缩减最终列表。 -
遵守速率限制:脚本会在请求之间暂停 0.5 秒。虽然没有记录在案的硬性速率限制,但处理大型数据集时,请增加延迟,并将结果缓存为 JSON。
-
跟踪版本:预印本可能有多个版本。DOI 查询会返回最新版本;
download_pdf会自动解析最新版本(传入version=可覆盖)。PDF/HTML URL 中包含版本号。预印本发表后,/details/的published字段会包含期刊 DOI(或NA)——请使用该字段,而不要按 DOI 查询/pubs/,因为后者对10.64898DOI 不会返回任何结果。 -
PDF 下载可能受到限流:PDF 来自
www.biorxiv.org,该站点位于 Cloudflare 防护之后,可能会对脚本请求返回 HTTP 429。请拉开下载间隔,或改用html_url;如需批量获取全文,请使用 bioRxiv 的请求方付费文本挖掘存储桶s3://biorxiv-src-monthly(MECA zip 软件包;参见 https://www.biorxiv.org/tdm)。 -
处理空结果:检查
result_count。结果为空通常表示该日期范围内没有匹配的论文、类别筛选过窄,或 API 暂时无法连接——并非分页被静默截断(分页会获取整个范围)。 -
使用详细模式进行调试:使用
--verbose查看每个分页 API 请求及报告的total。
高级功能
自定义日期范围逻辑
from datetime import datetime, timedelta
from scripts.biorxiv_search import BioRxivSearcher
# Last quarter
end_date = datetime.now()
start_date = end_date - timedelta(days=90)
papers = BioRxivSearcher().search_by_date_range(
start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d"), category="genomics"
)
限制结果数量
限制返回的结果数量:
python scripts/biorxiv_search.py \
--keywords "COVID-19" \
--days-back 30 \
--limit 50 \
--output covid_top50.json
不包含摘要以加快速度
只需要元数据时:
# Note: Abstract inclusion is controlled in Python API
from scripts.biorxiv_search import BioRxivSearcher
searcher = BioRxivSearcher()
papers = searcher.search_by_keywords(keywords=["AI"], days_back=30)
formatted = [searcher.format_result(p, include_abstract=False) for p in papers]
程序化集成
将搜索结果集成到下游分析工作流中:
import json
import pandas as pd
# Load results
with open('results.json') as f:
data = json.load(f)
# Convert to DataFrame for analysis
df = pd.DataFrame(data['results'])
# Analyze
print(f"Total papers: {len(df)}")
print(f"Date range: {df['date'].min()} to {df['date'].max()}")
print(f"\nTop authors by paper count:")
print(df['authors'].str.split(';').explode().str.strip().value_counts().head(10))
# Filter and export
recent = df[df['date'] >= '2024-06-01']
recent.to_csv('recent_papers.csv', index=False)
参考文档
如需详细的 API 规范、端点文档和响应架构,请参阅:
references/api_reference.md- 完整的 bioRxiv API 文档
参考文件包括:
- 完整的 API 端点规范
- 响应格式详情
- 错误处理模式
- 速率限制指南
- 高级搜索模式