测试
10,000 个网页
US$3.75
US$0.38/千页
- 用你的真实 URL 试一试
- 与最大积分包使用同一个 API
- 积分永不过期
用例 · 监控 · /batch
比较原始 HTML 时,每次广告或 token 变化都会触发告警。比较正文 Markdown 时,只会标出读者会注意到的变化:新价格、改写的条款、新的更新日志条目。
快速回答
如何监控网页的内容变化?
按计划把每个页面读取为正文 Markdown,存储文本,并与上一版本比较;只在文本变化时告警。WebReaderAPI 每个批量任务最多读取 100 个 URL,移除广告和菜单使其无法触发误报,截至 2026 年 10 月,每页从 US$0.07/千页 起收取一个积分。无需 KYC;用加密货币支付。
| Endpoint | POST https://webreaderapi.com/api/v1/batch,然后 GET https://webreaderapi.com/api/v1/jobs/{job_id} |
|---|---|
| 批量大小 | 每个批量任务最多 100 个 URL |
| 比较的内容 | 正文 Markdown,不含广告、菜单或横幅 |
| 计费 | 1 积分 = 读取 1 个页面且无需浏览器;当页面需要浏览器渲染 JavaScript 时为 2 积分。失败的请求,或被网站 robots.txt 拒绝的请求,不扣费 |
| 示例量 | 每天检查 200 个页面 = 每月约 6,000 个页面 |
| 价格 | US$3.75 仅需 10,000 个网页;积分永不过期 |
那些措辞对你的业务很重要、又会在不通知的情况下变化的页面:
把清单限定为公开页面。个人资料和需要登录的页面不在范围内。
因为 HTML 一直在变,内容却没变。轮播广告、会话令牌、页脚里的时间戳和 A/B 测试标记,会让同一页面的两次加载都不一样。对 HTML 做对比会把这些噪声变成告警,然后人们就不再读了。
正文 Markdown 在对比之前就去掉了大部分噪声。剩下的就是人实际阅读的文字:标题、段落、列表和表格。对这段文字做对比,结果简短、可读、值得告警。
import difflib
import json
import os
import pathlib
import time
import requests
API = "https://webreaderapi.com/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]}
STORE = pathlib.Path("snapshots.json")
URLS = [
"https://example.com/pricing",
"https://example.com/legal/terms",
"https://example.com/changelog",
]
old = json.loads(STORE.read_text(encoding="utf-8")) if STORE.exists() else {}
job = requests.post(API + "/batch", headers=HEADERS, json={"urls": URLS}, timeout=60).json()
results, cursor, delay = [], None, 5
while True:
params = {"cursor": cursor} if cursor else {}
page = requests.get(API + "/jobs/" + job["job_id"], headers=HEADERS, params=params, timeout=60).json()
results += page.get("results", [])
cursor = page.get("next_cursor")
if page["status"] == "done" and not cursor:
break
if not cursor:
time.sleep(delay)
delay = min(delay * 2, 60)
new = dict(old)
for item in results:
if "markdown" not in item:
print("not read:", item["url"], item.get("error", {}).get("code"))
continue
before = old.get(item["url"], "")
if before and before != item["markdown"]:
diff = difflib.unified_diff(before.splitlines(), item["markdown"].splitlines(), lineterm="", n=0)
print("CHANGED:", item["url"])
print("\n".join(list(diff)[:40]))
new[item["url"]] = item["markdown"]
STORE.write_text(json.dumps(new, ensure_ascii=False), encoding="utf-8")
页面实际多久变化一次,就多久检查一次,不要更频繁。每天适合定价页和变更日志;每周适合政策和文档。每小时读一次的页面,很少比每天读一次提供更多信息,成本却高 24 倍。
WebReaderAPI 会为每个页面遵循 robots.txt,并在整站抓取 (crawl) 任务中遵守站点的 Crawl-delay。站点不允许的页面会被跳过且不计费,所以严格的站点会直接从报告中消失。如果你需要访问拒绝 robots 的页面,请询问站点所有者。
每次检查每个页面一个积分。以下是 2026 年 10 月价格下的几个例子:
需要浏览器的页面消耗两个积分;对已知是纯 HTML 的页面设置 render=false,把消耗保持在一个积分。
用页面数乘以每月检查次数,然后选一个能用几个月的 pack。积分永不过期。
10,000 个网页
US$3.75
US$0.38/千页
50,000 个网页
US$14.25
US$0.28/千页
100,000 个网页
US$21.75
US$0.22/千页
所有套餐均包含: 正文提取 · 需要时渲染 JavaScript · 失败和被拒绝的页面不收费 · 积分永不过期
不会。它读取页面并返回 Markdown;由你的脚本对比版本,并通过邮件、聊天或工单发送告警。上面的代码会把变化的行打印出来,作为起点。
对比正文 Markdown,而不是 HTML,并在对比前去掉你已知每次加载都会变化的行,例如“5 分钟前更新”。大多数轮换元素在正文提取时就已经被去掉了。
能。使用 render=auto 时,没有 JavaScript 就是空白的页面会在无头浏览器中渲染,消耗两个积分。无需 JavaScript 就能正常显示的页面仍为一个积分。
能:运行整站抓取 (crawl) 任务而不是批量任务,然后逐页对比。对大型站点,先对比 sitemap 的 lastmod 日期,只重读有变化的页面。
低至 US$0.07/千页 · 无需 KYC
获取 API 密钥