前言¶
智能体在抓取网页时,常遇到 HTTP 抓取返回空壳、或被反爬拦截的情况。better-crawler-4-agent 是一个 MCP server,它通过真实浏览器渲染,解决这类问题。
核心功能¶
这个插件的核心价值是把 URL 变成干净正文的 MCP server。它用真实浏览器渲染,知乎、CSDN、掘金这些“HTTP 抓回来是空壳”的站点也能拿到内容。
安装后,DSH profile 中的模型会获得三个工具:
fetch_url(url, max_chars)- 抓单个页面fetch_urls(urls, max_chars, max_concurrent)- 并发抓取,逐条独立成败,最多支持 20 条并发crawler_status()- 查浏览器状态,排查启动失败
插件内部采用分层降级策略:浏览器渲染(主路径)-> trafilatura 直取(快路径)-> httpx + 完整浏览器指纹(兜底)。浏览器不可用时,会自动降级为后两层,crawler_status 会给出原因。
安装与启用¶
在 DSH 环境下,这是一个标准的插件包。安装命令如下:
dsh plugin --profile web add github:TC635807/better-crawler4agent
安装后,插件会通过 dsh.bundle.patch 将仓库的 MCP server 注册进当前 profile。模型即可直接使用上述三个工具。
使用方式¶
这是一个标准 stdio MCP server,不绑定任何客户端。除了在 DSH 中作为插件使用,它也兼容通用的 mcpServers 格式,可接入 Claude Code、Cursor、Windsurf、Cline 等客户端。
如果需要直接在代码中调用,可以使用 Python 接口:
import sys
sys.path.insert(0, r"D:\better-crawler4agent\src")
from better_crawler import Fetcher
async def main():
f = Fetcher()
await f.start() # 预热浏览器
result = await f.fetch("https://example.com/article")
if result.ok:
print(result.content)
print(f"命中层级: {result.tier}, {result.content_length} 字符")
else:
print(f"失败: {result.error}")
await f.close()
注意事项¶
使用时需要注意以下几点:
- Playwright 版本锁定:插件锁定
playwright==1.61.0。升级 playwright 时必须同步重装浏览器,否则会因 revision 不匹配而静默失败。 - 协议限制:仅允许
http和https协议。 - 降级机制:浏览器不可用时自动降级为 trafilatura 或 httpx。
- 并发限制:
fetch_urls最多支持 20 条并发,建议单次调用不要超过此数值。 - 安全:默认不允许访问内网地址,如需调试可设置环境变量
BETTER_CRAWLER_ALLOW_PRIVATE=1。
结尾¶
better-crawler-4-agent 是解决智能体网页抓取难题的实用工具。通过真实浏览器渲染和分层降级策略,它能在大多数站点上提取出干净的正文内容。
- GitHub 仓库: https://github.com/TC635807/better-crawler4agent
- 技能目录: https://www.skillhub.cn/plugins/TC635807/better-crawler4agent