mcpField
A
alterlab-biorxiv

alterlab-biorxiv

github.com/alterlab-ieu生产力7869 次安装5 周前更新
代码仓库

关于 alterlab-biorxiv

alterlab-biorxiv 是使用 bioRxiv 免密 API 搜索和获取生命科学预印本的 Python 工具。它支持按关键词、作者、日期和学科筛选,可返回结构化元数据并下载 PDF。

主要功能

  1. 01按关键词和作者搜索预印本
  2. 02按日期范围及学科筛选
  3. 03通过 DOI 获取论文详情
  4. 04下载预印本 PDF
  5. 05以 JSON 输出检索结果

适用场景

  1. 01检索特定主题的近期生命科学预印本
  2. 02追踪作者在指定时期的预印本
  3. 03整理系统性预印本文献综述
  4. 04下载论文全文用于分析

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-biorxiv

安装后在 Claude Code 中输入/alterlab-biorxiv确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
references/
api_reference.md
scripts/
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),但不支持关键词或作者筛选。因此,此工具会:

  1. 对日期范围分页(沿游标继续检索,直到获取所有记录),并向服务端传递 --category,以便只获取该主题的记录;然后
  2. 在客户端按关键词(标题/摘要中的子字符串)和作者(作者列表中的子字符串)进行筛选。

这意味着日期范围越大,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-cognition
  • biochemistry
  • bioengineering
  • bioinformatics
  • biophysics
  • cancer-biology
  • cell-biology
  • clinical-trials
  • developmental-biology
  • ecology
  • epidemiology
  • evolutionary-biology
  • genetics
  • genomics
  • immunology
  • microbiology
  • molecular-biology
  • neuroscience
  • paleontology
  • pathology
  • pharmacology-and-toxicology
  • physiology
  • plant-biology
  • scientific-communication-and-education
  • synthetic-biology
  • systems-biology
  • zoology

输出格式

所有搜索都会返回具有以下格式的结构化 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": ""
    }
  ]
}

常见用法模式

文献综述工作流
  1. 广泛关键词搜索:
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
  1. 提取并审阅结果:
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']}")
  1. 下载选定论文:
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)

最佳实践

  1. 缩小日期范围:由于筛选在客户端进行,工具会先对整个日期范围进行分页(每页 30 条记录),然后再筛选。繁忙的一周约有 800 篇预印本(约需调用 API 27 次);整整一年则有数万篇。请缩小日期范围,或使用 --days-back 搜索近期内容。

  2. 按类别筛选:已知主题时,请使用 --category。该参数会发送到服务端(?category=),因此既能缩小结果集,也能减少 API 调用次数(繁忙的一周:总体约 1,270 篇预印本,而细胞生物学领域约 80 篇)。

  3. 使用 --limit 限制结果:对于纯日期范围搜索,--limit 也会提前停止分页,因此确实能减少 API 调用。对于关键词或作者搜索,必须先扫描整个日期范围,因此 --limit 只会缩减最终列表。

  4. 遵守速率限制:脚本会在请求之间暂停 0.5 秒。虽然没有记录在案的硬性速率限制,但处理大型数据集时,请增加延迟,并将结果缓存为 JSON。

  5. 跟踪版本:预印本可能有多个版本。DOI 查询会返回最新版本;download_pdf 会自动解析最新版本(传入 version= 可覆盖)。PDF/HTML URL 中包含版本号。预印本发表后,/details/ 的 published 字段会包含期刊 DOI(或 NA)——请使用该字段,而不要按 DOI 查询 /pubs/,因为后者对 10.64898 DOI 不会返回任何结果。

  6. PDF 下载可能受到限流:PDF 来自 www.biorxiv.org,该站点位于 Cloudflare 防护之后,可能会对脚本请求返回 HTTP 429。请拉开下载间隔,或改用 html_url;如需批量获取全文,请使用 bioRxiv 的请求方付费文本挖掘存储桶 s3://biorxiv-src-monthly(MECA zip 软件包;参见 https://www.biorxiv.org/tdm)。

  7. 处理空结果:检查 result_count。结果为空通常表示该日期范围内没有匹配的论文、类别筛选过窄,或 API 暂时无法连接——并非分页被静默截断(分页会获取整个范围)。

  8. 使用详细模式进行调试:使用 --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 端点规范
  • 响应格式详情
  • 错误处理模式
  • 速率限制指南
  • 高级搜索模式

评论

支持 Markdown