mcpField
B
blocked-page-recovery

blocked-page-recovery

github.com/nousresearchAgent 工作流258.1k133 次安装今天更新
代码仓库

关于 blocked-page-recovery

用于取回受阻、付费墙限制或无法访问页面的技能及配套脚本。它依次尝试网页存档、可选的 Jina Reader、API 端点,最后才使用浏览器,并保留来源信息。

主要功能

  1. 01按既定顺序尝试恢复途径
  2. 02使用带日期的存档快照
  3. 03设置 API 密钥时使用 Jina Reader
  4. 04转向 API、信息源或站点地图
  5. 05验证页面内容而不只看状态码
  6. 06保留来源并标明过时副本

适用场景

  1. 01恢复因 403 或 429 响应受阻的文章
  2. 02查找已删除或受付费墙限制页面的存档
  3. 03获取 JavaScript 密集型页面的内容
  4. 04区分真实页面内容与拦截提示页

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nousresearch/hermes-agent --skill blocked-page-recovery

安装后在 Claude Code 中输入/blocked-page-recovery确认已加载。

附带文件scripts/recover_page.py

详细介绍

被拦截页面的恢复

如果页面无法获取——403/429、Cloudflare 的“Just a moment...”、付费墙, 或机器人检测中间页——不要放弃,也不要反复请求同一个 URL。第三方服务通常保存着该页面的副本。按以下顺序逐步尝试,先试成本最低的方案。

处理顺序

1. Wayback Machine  — archive.org "available" API  (snapshot + timestamp)
2. archive.today    — domain rotation: archive.ph → .md → .li → .is
3. Jina Reader      — only if JINA_API_KEY is set  (live server-side render)
4. API-first pivot  — look for /api/, /graphql, .json, or RSS on the same host
5. Real browser     — browser tool as the last, most expensive resort

使用捆绑脚本一次性运行:

python3 scripts/recover_page.py "https://example.com/blocked-article" --json

脚本会按顺序尝试各条路线,验证每个响应正文(见下文“虚假成功”),并输出第一个真实获取到的结果及其来源信息。

来源信息规范(必须遵守)

每份恢复的副本都有来源信息,引用时必须保留:

路线来源信息引用方式
Wayback / archive.todaysnapshot引用时注明快照日期:“据 2026-08-06 存档”。切勿将快照说成实时页面——它可能已过时。
Jina Readerlive在服务器端重新渲染实时页面;按常规方式引用。
实时获取 / 浏览器live按常规方式引用。

如果用户需要当前数据(价格、供应情况、突发新闻),快照只能作为背景信息,不能当作答案——请明确说明这一点,并注明快照的时间。

手动路线

1. Wayback Machine(来源信息最可靠,优先尝试)
# Discovery: returns closest snapshot URL + timestamp as JSON
curl -sL "https://archive.org/wayback/available?url={URL}"
# Then fetch archived_snapshots.closest.url

要枚举多个快照(或恢复已删除的页面),可使用 CDX 索引:

curl -sL "https://web.archive.org/cdx/search/cdx?url={URL}&output=json&limit=10"

CDX 在负载较高时会间歇性返回 503——如果遇到这种情况,请改用 available API;不要反复重试。

适用于:任何被公开抓取过的 URL。不适用于:被 robots 规则屏蔽的网站、 从未抓取过的 URL、仅使用 JS 的 SPA(快照不会渲染页面)。

2. archive.today(付费墙、已删除内容)

由用户提交的存档——通常能找到 Wayback 没有的付费新闻文章。 它会严格限制请求频率(429),并轮换域名,因此请逐一尝试:

for d in archive.ph archive.md archive.li archive.is; do
  curl -sL --max-time 20 "https://$d/newest/{URL}" -o ~/.hermes/cache/scratch/page.html \
    -w "%{http_code}" && break
done

验证响应正文,而非状态码——即使返回 429,也可能附带几 KB 的限流 HTML,仅靠大小检查会误判为成功。

3. Jina Reader(需要 JINA_API_KEY)

r.jina.ai 会在服务器端使用真实浏览器重新渲染实时页面, 并返回 Markdown。匿名访问已不可用(401 → Turnstile);必须提供密钥:

curl -s -H "Authorization: Bearer $JINA_API_KEY" "https://r.jina.ai/{URL}"

可处理存档无法处理的 JS SPA。如果环境变量未设置,请完全跳过此路线。

4. 优先转向 API

与其背后的数据端点相比,WAF 对 HTML 页面拦截得严厉得多。在某个网站尝试被拦截 2-3 次后,不要再与 HTML 页面较劲,而应查找:

  • 页面 URL 对应的 /api/...、/graphql 或 .json 版本
  • RSS/Atom 源(/feed、/rss,或你已恢复的任何页面副本中的 <link rel="alternate">)
  • 站点地图(/sitemap.xml),其中可能列出未受限制的规范 URL

虚假成功——会说谎的路线

这些路线会返回 HTTP 200 和看似合理的响应正文,但内容不是目标页面。脚本会自动拒绝这些结果;手动操作时也应拒绝:

  • Google Cache 已不可用(自 2024 年年中起)。webcache.googleusercontent.com 会返回 200 和数十 KB 的内容,但那是带有 JS 重定向的 Google Search 中间页, 并非缓存。切勿使用。
  • AMP 缓存(*.cdn.ampproject.org)大多会返回约 300 字节的 <title>Redirecting</title> meta refresh 占位页,并指向原始(被拦截的)URL。 将其视作成功会造成循环获取。
  • 限流响应正文:archive.today 的 429 页面是多 KB 的 HTML。请检查 其中是否包含目标页面的实际内容(标题词语、预期字符串),而不只是检查大小。

脚本应用的检测启发式:响应正文低于对应路线的字节数下限;meta refresh / JS 重定向占位页的目标为原始主机;中间页标题(“Just a moment”、“Redirecting”、“Google Search”、“Attention Required”)。

代理中继:不要使用

通用“网页代理”中继在设计上就是中间人。切勿通过此类中继发送 Cookie 或 Authorization 标头,也不要将其用于用户需要依赖的任何内容——其来源信息无法验证。请优先使用存档,至少它们会为副本标注时间。

评论

支持 Markdown