ScanSci PDF
让 Agent 替你下载学术论文 —— 20+ 数据源并行竞速,100+ 高校机构通道,一句自然语言拿下整份文献清单。
能力
给出 DOI、arXiv 号或一份文献清单,ScanSci PDF 会自动挑最快能下的那条路:OA 直链、预印本、出版商 API、你的学校通道都试一遍,付费墙自动路由,结果落地成规整命名的 PDF 文件。
- 单篇,一句话的事 — DOI / arXiv 进,
作者_年份_标题.pdf出;BibTeX / RIS / EndNote 引文顺手导出,可直推 Zotero。 - 清单,整批拿下 — APA / BibTeX / DOI 列表直接喂,自动补全缺失 DOI;上千篇先分「OA / 灰色源 / 需机构」三桶再分批下载,不瞎跑不浪费。
- 付费墙,走你的学校 — 100+ 高校 WebVPN、CARSI 联邦认证、EZProxy、Elsevier API 快速通道(1–2 秒/篇);登录在你自己的浏览器完成,密码不经过工具。
- 对抗与自愈全自动 — Cloudflare / CAPTCHA / SSO 分层处理;出版商封 IP 自动停损;机构会话过期自动重登,登录一次全程复用。
- Agent 原生 — 标准 MCP 服务器、17 个工具即装即用;Codex App、ZCode、Claude Code 都有现成的插件或配置。
近期更新
- 统一任务管线 — 任意输入(xlsx/csv 表格、文献清单、检索结果、文章页 URL)自动归一成带渠道预测的下载队列;
batch --lanes四车道调度:Elsevier API / OA 快车道并行,灰色源竞速与机构级联接续,失败逐级溢流。 - SI 附件下载 —
get <DOI> --si把补充材料一并拉下来;被 Cloudflare 挡住的 Elsevier 自动切隐身浏览器通道。 - AI 阅读层 —
get <DOI> --md顺手把 PDF 转成 agent 友好的 Markdown(PDF 仍是默认交付物)。 - OpenAIRE 仓储源接入 — 绿色 OA / 机构库副本进入免费竞速池,Unpaywall 漏掉的它来补(现已 20+ 数据源)。
- MCP 工具面瘦身 — 45 → 17 个工具,每次会话的 schema token 开销降约 60%,能力零损失。
- 更抗封、更稳 — 竞速引擎新增 (源 × 出版商) 负缓存,被 Cloudflare 拦一次不再反复烧超时;cloakbrowser 强制 0.5.9+(Chromium 151 内核);每周出版商金丝雀巡检。
快速开始
安装和更新是同一句话——对 Codex、ZCode、Claude Code 都这么说:
帮我安装或更新这个插件:https://github.com/Rimagination/scansci-pdf
Agent 会克隆(或原地更新)仓库、装好依赖并注册插件,然后你就能直接让它下论文了——例子见下一节怎么用。
手动安装 / pip / MCP 配置(不走对话流程时)
pip install scansci-pdf
标准 MCP 配置(Claude Desktop / Cursor / Windsurf / Cline / Cherry Studio…):
{
"mcpServers": {
"scansci-pdf": {
"command": "scansci-pdf",
"args": ["run"]
}
}
}
Codex App / Codex CLI(Windows 一键:克隆 + 装环境 + 注册插件):
powershell -NoProfile -ExecutionPolicy Bypass -Command '$p=Join-Path $HOME "plugins\scansci-pdf"; if(Test-Path $p){ git -C $p pull --ff-only } else { git clone --branch main --single-branch https://github.com/Rimagination/scansci-pdf.git $p }; & (Join-Path $p "scripts\install-scansci-pdf.ps1")'
ZCode:插件市场搜 scansci-pdf 一键安装,MCP、skills、快捷命令一次带齐。
插件入口:Codex = .codex-plugin/plugin.json + .mcp.json(自动注册 MCP server)+ skills/;ZCode = zcode-plugin/(marketplace 包:skills + /scansci 快捷命令);Claude Code = .claude/skills/ + 上面的标准 MCP 配置。
手动安装(Codex):仓库放到 %USERPROFILE%\plugins\scansci-pdf → python -m pip install -e . → 插件管理页刷新个人 marketplace;Codex CLI 可用时执行 codex plugin add scansci-pdf@local-plugins。
其他部署方式(HTTP 远程 / Docker / Web UI)
HTTP 模式(远程部署或不支持 stdio 的场景,默认只监听本机):
scansci-pdf run --mode streamable_http --host 127.0.0.1 --port 8000
Web UI:
scansci-pdf web --port 8080 # 浏览器打开 http://localhost:8080
Docker(内置 MCP 服务器 + Tor,数据卷持久化):
docker compose up -d
怎么用
装好后,对着 Agent 说一句话就行。这些例子覆盖最常见的日常场景:
帮我下载 10.1038/nature12373 这篇论文
这个清单里有 3000 篇文献,先分类哪些能直接下、哪些要走机构权限,然后分批下载
搜一下 "urban heat island" 2023 年以来被引最高的 10 篇论文,并下载
用北大的 WebVPN 登录,把这篇 Elsevier 的论文下下来
把刚才那批论文的 BibTeX 导出,再推送到 Zotero
这篇下载失败了,帮我诊断一下网络问题
不动 Agent、直接命令行也行:
scansci-pdf get 10.1038/nature12373 # 单篇下载
scansci-pdf batch 文献清单.xlsx --lanes # 批量下载(xlsx/csv/队列通用,四车道调度)
scansci-pdf search "carbon cycle" --out q.txt # 检索结果落成队列文件,直接接 batch
scansci-pdf check # 依赖与环境体检
MCP 工具全表(17 个,按意图分组)
| 想做什么 | 工具 |
|---|---|
| 下载单篇(可拉附件、转 Markdown) | scansci_pdf_download |
| 批量下载(列表 / xlsx·csv·bib·APA 文件) | scansci_pdf_batch_download |
| 检索、作者检索、系统性发现 | scansci_pdf_search · scansci_pdf_find · scansci_pdf_expand_citations |
| 准备队列(校验 / OA 定位 / 构建) | scansci_pdf_prepare_queue |
| 机构登录与状态(WebVPN / CARSI / EZProxy / 出版商 SSO) | scansci_pdf_login · scansci_pdf_channel_status · scansci_pdf_schools |
| 引文 / 元数据 / Zotero | scansci_pdf_citation · scansci_pdf_zotero_push |
| 配置 / 诊断 / Tor / 缓存 / Elsevier Key | scansci_pdf_config · scansci_pdf_diagnostics · scansci_pdf_tor · scansci_pdf_cache_clear · scansci_pdf_elsevier_setup |
每个工具的参数与说明由 MCP tools/list 自带,Agent 会自动看到。
机构通道
付费墙论文优先走这四条机构通道。登录都在你自己的浏览器里完成,密码不经过本工具。
Elsevier API(推荐,无需浏览器)
ScienceDirect / Cell Press 等 Elsevier 论文走 API 直接下载,速度从 15–30 秒降到 1–2 秒。Key 申请免费、个人邮箱即可:
- 访问 Elsevier Developer Portal 创建应用,勾选 ScienceDirect Article Retrieval
- 配置 Key:
scansci_pdf_elsevier_setup(MCP 会打开浏览器引导)或scansci_pdf_config(key="elsevier_api_key", value="...")
WebVPN(高校代理)
1. scansci_pdf_schools(action="search", query="北京") → 搜你的学校
2. scansci_pdf_schools(action="set", school="你的学校")
3. scansci_pdf_login(kind="webvpn") → 浏览器完成 CAS 认证
4. scansci_pdf_channel_status(kind="webvpn_test") → 确认连接正常
支持 100+ 所中国高校,命令行等价:scansci-pdf schools 北京 / scansci-pdf setup 北京航空航天大学。
CARSI(出版商联邦认证)
1. scansci_pdf_config(key="carsi_enabled", value="true")
2. scansci_pdf_config(key="carsi_idp_name", value="你的学校名称")
3. scansci_pdf_login(kind="carsi", publisher="sciencedirect")
支持 sciencedirect、springer、wiley、ieee、tandfonline、nature 等。SAGE 中国站首次使用
scansci_pdf_login(kind="carsi", publisher="sage-cn") 登录;之后下载会复用已保存会话,
从文章页解析实际 articleId 并请求站点自身的 PDF 下载接口,无需反复开启浏览器。
EZProxy(图书馆代理)
1. scansci_pdf_config(key="ezproxy_enabled", value="true")
2. scansci_pdf_config(key="ezproxy_login_url", value="https://libproxy.你的学校.edu.cn/login?url={url}")
3. scansci_pdf_login(kind="ezproxy")
ezproxy_login_url 支持两种模板:
- 前缀式(大多数学校):
https://ezproxy.lib.xxx.edu.cn/login?url={url},{url}会被替换成目标文章地址; - 域名重写式(如港科大
lib.ezproxy.hkust.edu.hk):https://{host_dashed}.lib.ezproxy.hkust.edu.hk,{host_dashed}会被替换成出版商域名的连字符形式(onlinelibrary.wiley.com→onlinelibrary-wiley-com)。这类部署不认login?url=前缀,必须用域名重写。
登录检测以 ezproxy/libproxy 域名下的会话 cookie 为准,不会把「被重定向到出版商原站」
误判为登录成功;会话校验也只探测代理自身的 /login 端点,对两类部署都有效。
支持的出版商路由表(19 家,自动生成)
| 策略 | DOI 前缀 | 域名 |
|---|---|---|
| ACM | 10.1145/ |
dl.acm.org |
| ACS | 10.1021/ |
pubs.acs.org |
| AIP | 10.1063/ |
pubs.aip.org |
| APS | 10.1103/ |
journals.aps.org |
| ASCE | 10.1061/ |
ascelibrary.org |
| Copernicus | 10.5194/ |
copernicus.org |
| Elsevier | 10.1016/, 10.1016/j. 等 18 个 |
sciencedirect.com |
| Generic | — | — |
| IEEE | 10.1109/ |
ieeexplore.ieee.org |
| IOP | 10.1088/ |
iopscience.iop.org |
| Nature | 10.1038/ |
nature.com |
| Oxford | 10.1093/ |
academic.oup.com |
| Royal Society | 10.1098/ |
royalsocietypublishing.org |
| RSC | 10.1039/ |
pubs.rsc.org |
| SAGE | 10.1177/ |
journals.sagepub.com |
| Science | 10.1126/ |
science.org |
| Springer | 10.1007/, 10.1023/ |
link.springer.com |
| Tandfonline | 10.1080/ |
tandfonline.com |
| Wiley | 10.1002/, 10.1111/ |
onlinelibrary.wiley.com |
配置与策略
配置参考(完整表)
通过 scansci_pdf_config 或 scansci-pdf config-cmd 修改:
| 配置项 | 默认值 | 说明 |
|---|---|---|
output_dir |
~/.scansci-pdf/papers |
PDF 保存目录 |
auto_rename |
true |
自动按作者/标题重命名 |
download_strategy |
fastest |
下载策略 |
scihub_enabled |
true |
启用 Sci-Hub/LibGen 类来源 |
network_proxy |
空 | HTTP/SOCKS 代理地址(机构 IP 授权类来源——Elsevier/Springer TDM API——必须走这里;HTTP_PROXY/HTTPS_PROXY 环境变量被有意忽略,也可用 SCANSCI_PDF_PROXY 环境变量) |
proxy_pool |
空 | 逗号分隔的代理列表;非空时批量下载按代理轮换出口 IP |
batch_workers |
10 |
批量下载并发数(被封 IP 时建议调低到 2) |
request_delay_min |
2.0 |
请求间随机延迟下限(秒) |
request_delay_max |
5.0 |
请求间随机延迟上限(秒) |
vpnsci_enabled / instsci_enabled |
false |
启用 WebVPN |
vpnsci_school / instsci_school |
空 | WebVPN 学校名称 |
carsi_enabled |
false |
启用 CARSI |
carsi_idp_name |
空 | CARSI 机构名称 |
auto_relogin |
true |
机构会话自愈:下载前自动校验 WebVPN 会话,明确过期才弹浏览器重登 |
cache_ttl_hours |
168 |
下载缓存 TTL(小时),设 0 禁用 |
elsevier_api_key |
空 | Elsevier / ScienceDirect API Key |
elsevier_insttoken |
空 | Elsevier institutional token,仅拿不到校园出口时需要(找机构管理员申请) |
use_tor_for_scihub |
false |
Sci-Hub 走 Tor |
flaresolverr_url |
http://localhost:8191/v1 |
FlareSolverr 服务地址 |
browser_headless |
false |
浏览器是否无头运行 |
browser_humanize |
true |
浏览器人性化操作 |
下载策略与缓存语义
| 策略 | 描述 |
|---|---|
fastest(默认) |
多数据源并行,最快获胜 |
oa_first |
优先开放获取,Sci-Hub 兜底 |
scihub_only / scihub_first |
仅用 / 优先 Sci-Hub |
legal_only |
仅使用合法数据源(不含 Sci-Hub/LibGen) |
- 每个输出目录的
.doi_index.json记录{file, source, strategy, ts};超过cache_ttl_hours视为过期自动重下。 - 显式策略与缓存记录的策略不符时视为未命中重新下载,无需手动删缓存。
- 下载进入机构阶段前自动校验 WebVPN 会话(HTTP 探测重定向),判定过期且
auto_relogin=true时自动重登;CARSI 自带 24 小时新鲜度校验。 - 与 ScanSci Find 闭环:
find产出候选 →manifest/batch下载并写download_results.json→scansci-find reconcile回写候选状态。(Find 系命令需要可选的 scansci-find CLI:pip install scansci-find,未安装时用 search/verify/resolve-oa/build-queue 本地降级链。)
批量调优:代理池与封 IP 停损
自动停损(默认开启):批量任务连续 3 次检测到 IP 被封(ACS 封锁页 / 403 / 429)会自动取消剩余下载,终端提示:
⚠ 已自动停止:连续检测到 IP 被出版商封禁(N 篇返回 ip_blocked),剩余任务已取消。
降低被封概率 —— 让请求像人:
scansci-pdf config-cmd batch_workers 2 # 调低并发(默认 10)
scansci-pdf config-cmd request_delay_min 5 # 拉大随机延迟下限(默认 2)
scansci-pdf config-cmd request_delay_max 12 # 拉大随机延迟上限(默认 5)
代理池轮换(进阶):多个代理轮换出口 IP,每个代理一个独立浏览器上下文,登录一次 cookies 全复用;连续 3 次被封的代理自动剔除:
scansci-pdf config-cmd proxy_pool "socks5://1.1.1.1:1080,http://2.2.2.2:8080"
⚠ 权衡:同一登录态从多个 IP 并发访问,少数出版商可能视为异常。机构对这种检测敏感的话,保持
proxy_pool为空即可。
故障排查
| 现象 | 先做 |
|---|---|
| 下载失败 | scansci-pdf check,会话问题再跑 scansci-pdf session-doctor |
| Agent 说 Elsevier 需要 insttoken | 不需要:API key + 校园网出口即可(insttoken 仅拿不到校园出口时申请);NOT_ENTITLED=未连校园网或学校未订阅,连网重试或转其他渠道 |
| Elsevier 403 Requestor configuration settings insufficient | key 有效但 key+出口未配置全文:scansci-pdf elsevier-check --doi <DOI>——未走校园出口则配 network_proxy/SCANSCI_PDF_PROXY;已走校园出口则是机构未给 key 开 API 全文权限(找机构 Elsevier 管理员,insttoken 为替代路径) |
| 新申请的 Elsevier key 一直 403 | 注册环节问题:机构邮箱注册 Elsevier 账号 + 校园网/学校 VPN 下创建 key(门户靠邮箱域 + 出口 IP 识别机构);创建后当场 scansci-pdf elsevier-check 验证 |
| 数据源全红 / 打不开 | Agent 里调 scansci_pdf_diagnostics(check="network"),给出针对性修复建议 |
| 以前能下的站点突然 403 / 弹 Cloudflare | 大概率 cloakbrowser 过旧:pip install -U cloakbrowser(scansci-pdf browser-doctor 会标出 outdated) |
| WebVPN / CARSI 登录失败 | pip install "scansci-pdf[cloakbrowser,instsci]",在可见浏览器完成登录后重试 |
| Sci-Hub 连不上 | 内嵌 Tor:scansci_pdf_tor(action="start", use_bridges=true),或配置 network_proxy |
| 下载速度慢 | 配置 Elsevier API Key;调 batch_workers;数据源延迟用 scansci_pdf_diagnostics(check="health") 查看 |
ACS 提示 IP Address Blocked 怎么办
批量下载 ACS(pubs.acs.org)等出版商时可能遇到整页报错:
IP Address Blocked — Your IP address has been blocked automatically due to unusual behavior.
这是出版商的自动反爬。机构出口 IP(如校园网)是共享的,一个人触发就可能让整段 IP 被封。
立即解除(封禁在出版商侧,代码改不了):
- 邮件
ipblock@acs.org申诉,附上被封 IP,通常 1–3 个工作日解封 - 换出口 IP(代理 / 手机热点)可绕过,但会失去机构订阅授权,只能下 OA 论文
- 部分封锁会在 24–48 小时后自动解除
预防:见上方「批量调优」折叠块 —— 调低并发、拉大延迟、启用代理池。
工作原理:五层竞速
下载一篇论文时,ScanSci PDF 同时启动多个数据源,按优先级分层竞速,第一个成功立即返回:
Tier 1 (4s) ─ 出版商直链(OA/机构访问)
Tier 2 (5s) ─ OpenAlex / Unpaywall / DOAJ
Tier 3 (8s) ─ EuropePMC / CORE / PMC / arXiv
Tier 4 (25s) ─ LibGen / Sci-Hub(带 FlareSolverr 绕过)
Tier 5 (20s) ─ WebVPN / CARSI 机构代理
架构说明:公开层(.py 源码、配置、文档)Apache 2.0;_core/*.pyx(Cython 源码)为专有层不公开;PyPI 安装自带编译二进制(.pyd),GitHub 克隆使用纯 Python 回退实现(功能相同,性能略低)。
交流群 / Community
扫码加入微信交流群,一起聊 AI for Science —— 偏 AI 应用与科研工具,也欢迎讨论 ScanSci PDF 的用法、bug 和需求。
|
微信交流群 / WeChat Group 群码 7 天有效,过期会更新 |
加群主微信 / Contact 群码失效?扫码备注 scansci 拉你进群 |
群聊方向
二维码过期会更新;着急进群可直接加群主微信。 |
更偏好异步交流?欢迎直接在 Issues 或 Discussions 区开贴。
赞助者
贡献者
致谢
本项目在开发过程中参考和借鉴了以下开源项目:
- FlareSolverr — 早期反 bot 绕过架构设计
- ref-downloader — Publisher 专用下载策略(Elsevier crasolve 检测、Wiley PDFDirect、AIP loading page 等)
- paper-fetch-skill — 论文获取 Agent Skill 设计
- paper-fetcher — 论文下载流程参考
- cloakbrowser — Chromium stealth 浏览器引擎
感谢以上项目作者的开源贡献。
许可证
例外:src/scansci_pdf/_core/ 中的 Cython 编译扩展(.pyd/.so)为预编译二进制,仅通过 PyPI 分发。其 Cython 源码(.pyx)为专有代码,不包含在本仓库中。
Star History
手绘星标曲线,每日由仓库自建的 Action 自动更新——数据与图表都在本仓库内,不依赖任何第三方服务。
Metadata
Release files for scansci-pdf 1.18.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| scansci_pdf-1.18.1.tar.gz | 512.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scansci_pdf-1.18.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.0 MB
Release files / scansci_pdf-1.18.1.tar.gz
| Download URL | scansci_pdf-1.18.1.tar.gz |
|---|---|
| Size | 512.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
39b2d362996ac2d49ae2e1d27aeb6fdd940d20276fb2fb4914ac3bdca32b7f89
|
|
BLAKE2b-256 checksum How to use checksums |
2d0bf3cb9872f2e6976492fab4eb79d5cd474431651a559c9a67521d3ae834ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / scansci_pdf-1.18.1-py3-none-any.whl
| Download URL | scansci_pdf-1.18.1-py3-none-any.whl |
|---|---|
| Size | 513.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c46b844f74be48caeb6b1a64dd084b66569fe1cad3c7d5e65f2951626a55d005
|
|
BLAKE2b-256 checksum How to use checksums |
99105e25fee809d0057eb47ce4ff8dddb9a75ebcf1c9f8cd62ea62fe087ed61a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log