论文下载工具:从溯源到「逼近零失败」的系统完善
围绕项目 26060138 当年用过的论文下载工具展开:先查清它是什么、那 150 篇是不是它下的,再诊断失败根因、给出无机构权限下的可行下载路径,最后把它完善成一套「给任意一篇标识符就尽力下到」的统一下载系统。
00概览
- 工具不是自研——是第三方开源项目
scansci-pdf(作者 GitHub Rimagination / PyPI),我们当年只是装来用。 - 那 150 篇确证由它下载——它自己的批量日志里 149/150 文件名一一对得上。
- 失败根因不在算法——在于垃圾输入、开放获取被反爬挡、付费墙无机构访问;且工具环境早已被系统 Python 升级搞坏。
- 无机构权限的真解——合法「绿色 OA」(Europe PMC)为主力 + 住宅代理突破机房 IP 天花板 + NSTL 文献传递兜底。严格零失败不可达,但可逼近。
01工具溯源:scansci-pdf 是不是我们自研的?
项目 26060138 当年用的下载工具是 scansci-pdf——一个学术论文下载 MCP 服务器(13+ 数据源并行竞速、机构 WebVPN/CARSI、Tor/FlareSolverr 绕 Cloudflare)。查证据:
| 证据 | 结果 |
|---|---|
| git remote | github.com/Rimagination/scansci-pdf.git(仓库归第三方) |
| 全部 36 个 commit 作者 | 清一色 Rimagination,无任何我们的身份 |
| 发布渠道 | PyPI 公开包 scansci-pdf,Apache-2.0 |
| 落到本机 | 2026-06 才 clone 进 Antigravity CLI 的 scratch 目录、装到 ~/.local/bin |
所以准确说法:上游作者 = Rimagination;我们是使用方,通过 Antigravity/Gemini CLI 把它装来做文献下载。
02那 150 篇文章是它下的吗?
- 工具自己的批量下载日志
~/.scansci-pdf/batch_progress/*.jsonl记着 717 条 DOI 下载记录(每条含来源/成败/落盘文件)。 - 最终
selected_150/的 150 篇里,149 篇文件名一字不差地出现在这些日志中。 - 命名 100% 是 scansci-pdf 的自动格式
作者年份_标题.pdf;落盘时间与日志、元数据缓存全在同一时段。
当时流程还原:批量跑 700+ DOI → 成功下 487 篇到 ~/downloads → 去重按相关性/影响因子/年份筛出最好的 150 篇。实际命中来源:NatureDirect 104、Sci-Hub 80、LibGen 72、Unpaywall 64、OpenAlex 42…
03失败诊断:174 个失败拆开看
| 类别 | 数量 | 真相 |
|---|---|---|
| 需机构访问(Wiley/Elsevier/Nature…) | 67 | 没配任何机构访问,全赌 Sci-Hub(而它成功率仅 0.198) |
| 可重试·OA 抓取失败(多为 MDPI) | 45 | 本是全开放,下载时浏览器层没起、被反爬挡了 |
| 需人工确认 | 41 | 出版商/DOI 存疑 |
| 非论文垃圾(PDB/数据集/摘要/书章) | 21 | 压根不是论文,不该进队列 |
~/.local/bin/scansci-pdf 随系统 Python 从 3.11 升到 3.13 而失效(包在 3.11、默认解释器变 3.13)。所以「提高成功率」前先得重建环境——用 uv 建了专用 venv 才恢复可运行,并真下了一篇 arXiv 验证链路通。
04没有机构权限,怎么下这类文献?
第 1 层 · 把免费的合法开放版挖干净(最大免费收益)
很多「付费墙」论文其实有免费合法版本:PMC / Europe PMC 绿色存档(NIH/基金资助论文过禁运期即免费上 PMC,哪怕出版商版收费)、预印本(bioRxiv/arXiv)、被 Cloudflare 挡住的 MDPI(起浏览器层可救)。
第 2 层 · 灰色源捞「老」付费文献(≤2021)
Sci-Hub 挂 Tor/干净代理 + LibGen——只对老论文有效,且属版权灰色地带(仅内部阅读)。
第 3 层 · 合法「文献传递」兜底
国家科技图书文献中心 NSTL(nstl.gov.cn,个人免费注册)、省市公共图书馆——官方合法递送,多数免费或几块钱一篇。这是没有大学身份时最接近「机构访问」的合法渠道。
05Sci-Hub 下的论文,能拿来引用写综述吗?
引用一篇论文,跟你从哪儿拿到 PDF 完全无关。你引用的是那篇已正式发表的论文本身(作者/期刊/DOI),审稿人和期刊既不会问也无从知道你用什么渠道读的。用 Sci-Hub 读了再引用,不构成学术不端。
灰色的只是「下载」这个动作(版权层面),它不影响「引用」的正当性。真正要注意的:
- 别对外分发那些 PDF——自己读、写综述风险很低;打包共享/放进交付物给客户则是「再分发受版权保护文件」,风险等级不同。
- 引用对着正式出版版本核——预印本要标注版本。
- 复用整张图/表要单独申请授权——无论从哪拿的 PDF 都一样,这是所有综述的通例。
06建成的系统:逼近「给一篇就下一篇」
目标既然是完善下载系统、尽可能多地下载,就把所有获取渠道做成瀑布流(一个源失败自动落下一个),并做成一个「给任意标识符 → 尽力下到」的统一入口 paperfetch.py。输入可以是 DOI / PMID / PMCID / arXiv / 文章 URL / 标题。
关键有效路径
弃用 scansci-pdf 自带竞速引擎(对付费墙每篇干等 50–180s、且 Sci-Hub 从本机 IP 全封),改直取。其中最关键的一步是 Europe PMC REST 全文接口(/{PMCID}/fullTextPDF,主机在 EBI 不走反爬)——把大量「Wiley/Elsevier 付费墙」论文的 PMC 绿色存档一遍拿回 84 篇。
实测覆盖率(诚实数字)
| 场景 | 命中率 | 说明 |
|---|---|---|
| 生物医学批(脂代谢/动脉粥样硬化) | 75% 113/151 | 生医 PMC 绿色 OA 最全 |
| 随机跨学科 2024+ 论文 | ~38% 9/24 | 一般文献 OA 率低,大量新付费墙 + 冷门期刊 |
领域差异巨大:生医能到 3/4,通用文献只有 1/3 左右。差距全在付费墙且无任何免费副本的论文。
07天花板与最大杠杆
用证据确认了:这台服务器的「数据中心 IP」是天花板——MDPI 用 Akamai(不是 Cloudflare)封死 PDF 端点,连 FlareSolverr 真浏览器都过不了(同一个机房 IP);Sci-Hub 从这个 IP 完全被封;Wiley/Nature 直链对机房 IP 返回 403。
PAPERFETCH_PROXY 环境变量),给一个代理即可点亮。注意:即便有代理,Sci-Hub 仍没有 2021 年后的新文,最新付费墙的最后一段只能走 NSTL 文献传递。
代理与 Claude 风控(澄清)
代理只给下载脚本发往出版商/Sci-Hub 的请求用,不经过 Anthropic、不路由 Claude 的流量、Anthropic 也看不到——用不用下载代理,跟 Claude 账号风控没有技术关系。真正的灰色地带在版权(Sci-Hub),是使用者与出版商之间的事,且仅在开灰色源时涉及。也完全可以不碰代理,走 100% 合法路线(合法 OA + NSTL 文献传递)。
现实的目标分层
| 配置 | 可达覆盖率 |
|---|---|
| 现在(纯合法 OA,无代理) | 通用 ~40% / 生医 ~75% |
| + 住宅代理 + 灰色源 | ~85–90%(拿到有任何灰色副本的付费墙论文) |
| + NSTL 文献传递兜底 | 逐步逼近 ~99%(最后几个百分点是人工/付费) |
08指令日志
/home/mzh/share/scansci-toolkit(paperfetch.py 等)