让 Agent 替你下载学术论文 —— 20+ 数据源并行竞速,100+ 高校机构通道,一句自然语言拿下整份文献清单。
给出 DOI、arXiv 号或一份文献清单,ScanSci PDF 会自动挑最快能下的那条路:OA 直链、预印本、出版商 API、你的学校通道都试一遍,付费墙自动路由,结果落地成规整命名的 PDF 文件。
作者_年份_标题.pdf 出;BibTeX / RIS / EndNote 引文顺手导出,可直推 Zotero。batch --lanes 四车道调度:Elsevier API / OA 快车道并行,灰色源竞速与机构级联接续,失败逐级溢流。get <DOI> --si 把补充材料一并拉下来;被 Cloudflare 挡住的 Elsevier 自动切隐身浏览器通道。get <DOI> --md 顺手把 PDF 转成 agent 友好的 Markdown(PDF 仍是默认交付物)。安装和更新是同一句话——对 Codex、ZCode、Claude Code 都这么说:
帮我安装或更新这个插件:https://github.com/Rimagination/scansci-pdf
Agent 会克隆(或原地更新)仓库、装好依赖并注册插件,然后你就能直接让它下论文了——例子见下一节怎么用。
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 模式(远程部署或不支持 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 # 依赖与环境体检
| 想做什么 | 工具 |
|---|---|
| 下载单篇(可拉附件、转 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 会自动看到。
付费墙论文优先走这四条机构通道。登录都在你自己的浏览器里完成,密码不经过本工具。
ScienceDirect / Cell Press 等 Elsevier 论文走 API 直接下载,速度从 15–30 秒降到 1–2 秒。Key 申请免费、个人邮箱即可:
scansci_pdf_elsevier_setup(MCP 会打开浏览器引导)或 scansci_pdf_config(key="elsevier_api_key", value="...")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 北京航空航天大学。
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 下载接口,无需反复开启浏览器。
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 端点,对两类部署都有效。
| 策略 | 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 视为过期自动重下。auto_relogin=true 时自动重登;CARSI 自带 24 小时新鲜度校验。find 产出候选 → manifest / batch 下载并写 download_results.json → scansci-find reconcile 回写候选状态。(Find 系命令需要可选的 scansci-find CLI:pip install scansci-find,未安装时用 search/verify/resolve-oa/build-queue 本地降级链。)自动停损(默认开启):批量任务连续 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(pubs.acs.org)等出版商时可能遇到整页报错:
IP Address Blocked — Your IP address has been blocked automatically due to unusual behavior.
这是出版商的自动反爬。机构出口 IP(如校园网)是共享的,一个人触发就可能让整段 IP 被封。
立即解除(封禁在出版商侧,代码改不了):
[email protected] 申诉,附上被封 IP,通常 1–3 个工作日解封预防:见上方「批量调优」折叠块 —— 调低并发、拉大延迟、启用代理池。
下载一篇论文时,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 回退实现(功能相同,性能略低)。
扫码加入微信交流群,一起聊 AI for Science —— 偏 AI 应用与科研工具,也欢迎讨论 ScanSci PDF 的用法、bug 和需求。
微信交流群 / WeChat Group 群码 7 天有效,过期会更新 |
加群主微信 / Contact 群码失效?扫码备注 scansci 拉你进群 |
群聊方向
二维码过期会更新;着急进群可直接加群主微信。 |
更偏好异步交流?欢迎直接在 Issues 或 Discussions 区开贴。
本项目在开发过程中参考和借鉴了以下开源项目:
感谢以上项目作者的开源贡献。
例外:src/scansci_pdf/_core/ 中的 Cython 编译扩展(.pyd/.so)为预编译二进制,仅通过 PyPI 分发。其 Cython 源码(.pyx)为专有代码,不包含在本仓库中。
手绘星标曲线,每日由仓库自建的 Action 自动更新——数据与图表都在本仓库内,不依赖任何第三方服务。
35 followers · starred Sep 2026
106 followers · starred Jul 2026
让 Agent 替你下载学术论文 —— 20+ 数据源并行竞速,100+ 高校机构通道,一句自然语言拿下整份文献清单。
给出 DOI、arXiv 号或一份文献清单,ScanSci PDF 会自动挑最快能下的那条路:OA 直链、预印本、出版商 API、你的学校通道都试一遍,付费墙自动路由,结果落地成规整命名的 PDF 文件。
作者_年份_标题.pdf 出;BibTeX / RIS / EndNote 引文顺手导出,可直推 Zotero。batch --lanes 四车道调度:Elsevier API / OA 快车道并行,灰色源竞速与机构级联接续,失败逐级溢流。get <DOI> --si 把补充材料一并拉下来;被 Cloudflare 挡住的 Elsevier 自动切隐身浏览器通道。get <DOI> --md 顺手把 PDF 转成 agent 友好的 Markdown(PDF 仍是默认交付物)。安装和更新是同一句话——对 Codex、ZCode、Claude Code 都这么说:
帮我安装或更新这个插件:https://github.com/Rimagination/scansci-pdf
Agent 会克隆(或原地更新)仓库、装好依赖并注册插件,然后你就能直接让它下论文了——例子见下一节怎么用。
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 模式(远程部署或不支持 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 # 依赖与环境体检
| 想做什么 | 工具 |
|---|---|
| 下载单篇(可拉附件、转 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 会自动看到。
付费墙论文优先走这四条机构通道。登录都在你自己的浏览器里完成,密码不经过本工具。
ScienceDirect / Cell Press 等 Elsevier 论文走 API 直接下载,速度从 15–30 秒降到 1–2 秒。Key 申请免费、个人邮箱即可:
scansci_pdf_elsevier_setup(MCP 会打开浏览器引导)或 scansci_pdf_config(key="elsevier_api_key", value="...")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 北京航空航天大学。
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 下载接口,无需反复开启浏览器。
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 端点,对两类部署都有效。
| 策略 | 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 视为过期自动重下。auto_relogin=true 时自动重登;CARSI 自带 24 小时新鲜度校验。find 产出候选 → manifest / batch 下载并写 download_results.json → scansci-find reconcile 回写候选状态。(Find 系命令需要可选的 scansci-find CLI:pip install scansci-find,未安装时用 search/verify/resolve-oa/build-queue 本地降级链。)自动停损(默认开启):批量任务连续 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(pubs.acs.org)等出版商时可能遇到整页报错:
IP Address Blocked — Your IP address has been blocked automatically due to unusual behavior.
这是出版商的自动反爬。机构出口 IP(如校园网)是共享的,一个人触发就可能让整段 IP 被封。
立即解除(封禁在出版商侧,代码改不了):
[email protected] 申诉,附上被封 IP,通常 1–3 个工作日解封预防:见上方「批量调优」折叠块 —— 调低并发、拉大延迟、启用代理池。
下载一篇论文时,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 回退实现(功能相同,性能略低)。
扫码加入微信交流群,一起聊 AI for Science —— 偏 AI 应用与科研工具,也欢迎讨论 ScanSci PDF 的用法、bug 和需求。
微信交流群 / WeChat Group 群码 7 天有效,过期会更新 |
加群主微信 / Contact 群码失效?扫码备注 scansci 拉你进群 |
群聊方向
二维码过期会更新;着急进群可直接加群主微信。 |
更偏好异步交流?欢迎直接在 Issues 或 Discussions 区开贴。
本项目在开发过程中参考和借鉴了以下开源项目:
感谢以上项目作者的开源贡献。
例外:src/scansci_pdf/_core/ 中的 Cython 编译扩展(.pyd/.so)为预编译二进制,仅通过 PyPI 分发。其 Cython 源码(.pyx)为专有代码,不包含在本仓库中。
手绘星标曲线,每日由仓库自建的 Action 自动更新——数据与图表都在本仓库内,不依赖任何第三方服务。
35 followers · starred Sep 2026
106 followers · starred Jul 2026