# pubmed-downloader > 下载PubMed文献并录入知识库。支持通过PMID、关键词搜索和下载文献元数据,并可下载PDF全文。用户需在.env文件中配置NCBI_API_KEY。 - Author: alex90thu - Repository: alex90thu/skills - Version: 20260124100437 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/alex90thu/skills - Web: https://mule.run/skillshub/@@alex90thu/skills~pubmed-downloader:20260124100437 --- --- name: pubmed-downloader description: 下载PubMed文献并录入知识库。支持通过PMID、关键词搜索和下载文献元数据,并可下载PDF全文。用户需在.env文件中配置NCBI_API_KEY。 --- # PubMed 文献下载器 从 NCBI PubMed 数据库搜索和下载文献,支持下载 PDF 全文。也支持将文献信息录入到知识库。 ## 默认存储位置 所有下载结果默认存储在 `skills/pubmed-downloader/results/` 目录下: - **文献元数据 (JSON)**: `skills/pubmed-downloader/results/json/` 目录 - **PDF 全文**: `skills/pubmed-downloader/results/pdfs/` 目录 ## 环境配置 用户需在项目根目录的 `.env` 文件中配置(如果用户确认配置好了,那么就不需要提交issue): ```env # PubMed API (必需) NCBI_API_KEY=your_ncbi_api_key_here # 知识库配置 (导入知识库时需要) KB_ACCESS_TOKEN=your_access_token_here KB_REFRESH_TOKEN=your_refresh_token_here KB_BASE_URL=http://8.136.56.203 ``` ## 快速使用 (scripts/pubmed_client.py) ```bash # 搜索文献 python pubmed_client.py search "cancer immunotherapy" 10 # 通过 PMID 获取文献详情 python pubmed_client.py fetch 12345678 # 下载并保存为 JSON(默认保存到 ../results/json/ 目录) python pubmed_client.py download "CRISPR" 20 --output ../results/json/crispr.json # 导入到知识库 python pubmed_client.py import "stem cell" 10 # 下载单篇 PDF(默认保存到 ../results/pdfs/ 目录) python pubmed_client.py download-pdf "10.1126/science.add8643" # 下载单篇 PDF (通过 PMID) python pubmed_client.py download-pdf 12345678 # 批量下载 PDF python pubmed_client.py batch-pdf "CRISPR" 5 ``` ## PDF 下载功能 ### 单篇下载 ```bash python pubmed_client.py download-pdf [--output DIR] [--use-selenium] ``` - 支持 DOI、PMID 或完整 URL 作为输入 - 自动识别出版商并生成 PDF 链接 - 优先从 PMC 下载免费全文 - 支持 Unpaywall 查找开放获取版本 - 默认输出目录: `../pdfs/` ### 批量下载(通过搜索) ```bash python pubmed_client.py batch-pdf [max_results] [--output DIR] [--use-selenium] ``` ### 批量下载(通过JSON文件) 如果已有文献列表JSON文件,可以使用 `batch_download.py` 脚本: ```bash # 基本用法(默认输出到 ../pdfs/) python batch_download.py ../json/articles.json # 使用Selenium下载 python batch_download.py ../json/articles.json --use-selenium # 仅从PMC下载免费全文 python batch_download.py ../json/articles.json --pmc-only # 从第10篇开始继续下载 python batch_download.py ../json/articles.json --start 10 ``` JSON文件格式示例: ```json [ {"pmid": "12345678", "doi": "10.1038/xxxxx", "title": "文献标题"}, {"pmid": "87654321", "doi": "10.1126/xxxxx", "title": "另一篇文献"} ] ``` ### 支持的出版商及PDF链接模板 对于需要机构订阅的文献,可以直接使用以下PDF链接模板(需在校园网或VPN环境下访问): | 出版商 | DOI 前缀 | PDF 链接模板 | 备注 | |--------|----------|-------------|------| | Nature | 10.1038 | `https://www.nature.com/articles/{doi_suffix}.pdf` | doi_suffix为DOI去掉"10.1038/"后的部分 | | Springer | 10.1007 | `https://link.springer.com/content/pdf/{doi}.pdf` | 直接替换{doi} | | Wiley | 10.1002, 10.1111 | `https://onlinelibrary.wiley.com/doi/pdfdirect/{doi}` | 直接替换{doi} | | Cell Press | 10.1016/j.cell | `https://doi.org/{doi}` | 访问DOI页面点击PDF | | Elsevier | 10.1016 | `https://doi.org/{doi}` | 访问DOI页面点击PDF | | Science | 10.1126 | `https://www.science.org/doi/epdf/{doi}` | 需要订阅 | | PNAS | 10.1073 | `https://www.pnas.org/doi/epdf/{doi}` | 6个月后免费 | | MDPI | 10.3390 | `https://www.mdpi.com/{path}/pdf` | 开放获取 | | PLOS | 10.1371 | `https://journals.plos.org/plosone/article/file?id={doi}&type=printable` | 开放获取 | | Frontiers | 10.3389 | `https://www.frontiersin.org/articles/{doi}/pdf` | 开放获取 | | bioRxiv | 10.1101 | `https://www.biorxiv.org/content/{doi}.full.pdf` | 预印本,免费 | | PMC | - | `https://www.ncbi.nlm.nih.gov/pmc/articles/{pmc_id}/pdf/` | 免费全文 | **示例**: - DOI `10.1038/s41586-020-03091-w` → PDF链接: `https://www.nature.com/articles/s41586-020-03091-w.pdf` - DOI `10.1007/s00122-015-2537-6` → PDF链接: `https://link.springer.com/content/pdf/10.1007/s00122-015-2537-6.pdf` - DOI `10.1111/pbi.13170` → PDF链接: `https://onlinelibrary.wiley.com/doi/pdfdirect/10.1111/pbi.13170` ### 配置文件 出版商 URL 映射规则存储在 `config/publishers.json`,可以根据需要添加新的出版商。 ### 下载策略 1. **PMC 全文**: 如果提供 PMID,优先检查是否有免费 PMC 全文 2. **出版商直接链接**: 根据 DOI 识别出版商,直接访问 PDF 链接 3. **DOI 页面查找**: 访问 DOI 页面,自动查找 PDF 下载链接 4. **Unpaywall**: 查找合法的开放获取版本 5. **手动下载**: 如果自动下载失败,提供PDF链接供用户手动下载 ### Selenium 使用(支持机构订阅) 部分出版商网站需要 Selenium 下载。如果你的机构已购买订阅: ```bash # 安装依赖 pip install selenium # 使用Selenium下载(会打开Chrome浏览器窗口) python batch_download.py ../json/articles.json --use-selenium ``` **注意**: 下载过程中可能遇到 Cloudflare 人机验证,请在弹出的浏览器窗口中手动完成验证。 ## 文献搜索功能 ### 搜索文献 ``` search [max_results] ``` 搜索语法示例: - `"breast cancer"` - 精确短语搜索 - `cancer AND therapy` - 布尔搜索 - `Smith[Author]` - 作者搜索 - `Nature[Journal]` - 期刊搜索 - `2023[PDAT]` - 发表日期搜索 - `"COVID-19"[MeSH]` - MeSH 主题词搜索 ### 获取文献详情 ``` fetch 或 fetch ``` 返回文献的完整信息: - 标题、摘要 - 作者列表 - 期刊信息 - 发表日期 - DOI、关键词 - MeSH 术语 ### 下载文献元数据 ``` download [max_results] --output ``` 将搜索结果保存为 JSON 文件。默认保存到 `../json/` 目录。 ### 导入知识库 ``` import [max_results] ``` 搜索文献并自动导入到知识库系统。 ## 返回数据格式 ```json { "pmid": "12345678", "title": "文献标题", "abstract": "摘要内容...", "authors": [ {"name": "Smith J", "affiliation": "Harvard University"} ], "journal": { "name": "Nature", "volume": "123", "issue": "4", "pages": "100-110" }, "pub_date": "2024-01-15", "doi": "10.1038/xxxxx", "keywords": ["keyword1", "keyword2"], "mesh_terms": ["term1", "term2"], "pub_types": ["Journal Article", "Research Support"] } ``` ## 注意事项 1. **API 限制**: 无 API Key 时限制 3 次/秒,有 Key 时 10 次/秒 2. **批量操作**: 建议每批不超过 100 条记录 3. **导入确认**: 导入知识库前会展示预览并请求确认 4. **PDF 下载**: 大部分付费期刊需要机构订阅才能下载全文 5. **网络要求**: 需要能访问 NCBI 服务器 (eutils.ncbi.nlm.nih.gov) 6. **人机验证**: 部分网站有 Cloudflare 保护,需手动完成验证