alterlab-biorxiv について
alterlab-biorxivは、キー不要のbioRxiv APIを使って生命科学分野のプレプリントを検索・取得するPythonツールです。キーワード、著者、日付、分野で絞り込み、構造化メタデータの取得やPDFのダウンロードができます。
主な機能
- 01キーワード・著者による検索
- 02日付範囲・分野による絞り込み
- 03DOIによる論文詳細の取得
- 04プレプリントPDFのダウンロード
- 05JSON形式での検索結果出力
活用シーン
- 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 エンドポイントは、日付範囲内のプレプリントを 1 ページあたり 30 件返します。サーバー側の分野カテゴリフィルター(?category=cell_biology)には対応していますが、キーワードや著者によるフィルターには対応していません。そのため、このツールは次の処理を行います。
- すべてのレコードを取得するまでカーソルをたどりながら日付範囲をページネーションし、対象分野だけを取得するよう
--categoryをサーバーに渡します。その後、 - キーワード(タイトル/要旨内の部分文字列)と著者(著者一覧内の部分文字列)でクライアント側のフィルタリングを行います。
つまり、日付範囲が広いほど API 呼び出しが増え、ダウンロード量も大きくなります。質問の要件を満たす範囲で日付をできるだけ絞り、--category(API 呼び出しを削減)と --limit を使って処理量を制限してください。
このスキルを使用する場面
次のような場合に使用します。
- 特定の研究分野における最近の生命科学プレプリントを検索する
- 特定の著者によるプレプリントを追跡する
- プレプリント文献のシステマティックレビューを実施する
- 期間ごとのプレプリントの傾向を分析する
- 引用文献管理用のメタデータを取得する
- 分析用にプレプリントの PDF をダウンロードする
- bioRxiv の分野カテゴリで論文を絞り込む
対象外
| シナリオ | 代わりに使用 |
|---|---|
| 査読済みで MeSH インデックス登録された生物医学系ジャーナル論文 | alterlab-pubmed |
| arXiv 上の CS/物理学/数学/定量生物学のプレプリント | 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
検索対象フィールド:
キーワードの照合では大文字と小文字を区別せず、いずれか1つのキーワードが見つかれば論文が一致します(AND ではなく OR の意味です)。既定では、タイトルと要旨の両方が検索対象です。--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 には 2 つのプレフィックスがあります。
10.1101/… は古いプレプリント用、10.64898/… は openRxiv への移行後(2025 年 12 月)に
投稿されたプレプリント用です。例: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)
ベストプラクティス
-
日付範囲は狭く設定する:フィルタリングはクライアント側で行われるため、ツールはフィルタリングの前に範囲全体をページネーションします(1ページあたり30件)。論文の投稿が多い週は約800件のプレプリント(API 呼び出し約27回)ですが、1年分では数万件に達します。範囲を狭めるか、最近のものを検索するには
--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)が格納されます。10.64898の DOI では何も返さない DOI ごとの/pubs/検索ではなく、このフィールドを使用してください。 -
PDF のダウンロードには制限がかかることがあります:PDF は Cloudflare の背後にある
www.biorxiv.orgから配信されるため、スクリプトによるリクエストに 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 エンドポイントの全仕様
- レスポンス形式の詳細
- エラー処理のパターン
- レート制限のガイドライン
- 高度な検索パターン