资讯动态

从 Axios 到无头浏览器:web-search-mcp 内容提取双路回退与反检测伪装策略全解析

发布时间:2026/10/14 17:40:10 来源:尧图企业网站定制
人工智能MCP 服务【免费下载链接】web-search-mcpA simple, locally hosted Web Search MCP server for use with Local LLMs项目地址https://gitcode.com/gh_mirrors/we/web-search-mcp点击查看免费下载web-search-mcp 是一款免 API Key、本地部署的 Web 搜索 MCP 服务器专为 Local LLM 打造。它的核心亮点正是本文主角——内容提取的双路回退机制先用 axios 快速抓取被网站识破或页面需要 JS 渲染时自动切换到 Playwright 无头浏览器并叠加一整套反检测伪装策略让 LLM 能稳定拿到真实正文。下文带你完整看懂这条快车道 保险车道的设计思路。 先认识 web-search-mcp三个工具各管一摊web-search-mcp 用 TypeScript 编写通过 MCPModel Context Protocol协议暴露三个工具已适配 LM Studio 与 LibreChat工具名职责适用场景full-web-search搜索 抓取每个结果页的完整正文深度研究、需要原文get-web-search-summaries只返回结果摘要snippet快速浏览、省 tokenget-single-web-page-content直接提取单个 URL 的正文已知链接跳过搜索三个工具共用同一套搜索引擎 内容提取器底座本文聚焦其中工程含量最高的两块多引擎搜索回退与双路内容提取。更多工具参数细节可查 docs/API.md。️ 内容提取双路回退快车道与保险车道的分工整个流程的总控逻辑在 src/enhanced-content-extractor.ts思路非常直白第一车道axios直接发 HTTP 请求速度快、开销小绝大多数静态页面一次搞定质量自检拿到内容后先验货——如果内容可疑主动触发回退第二车道无头浏览器当第一车道失败且失败原因值得动用浏览器时从浏览器池取一个实例带着全套伪装重新访问两条路都失败才认输错误信息向上层汇总。这种先轻后重的策略让 90% 以上的请求停留在毫秒级的 HTTP 层只有真正棘手的页面才付出启动浏览器的成本。 快车道细节axios 请求也先乔装打扮axios 并非裸奔。每次请求都会随机套用一套真实浏览器请求头包括 Chrome 121 在 Windows / macOS / Linux 三平台各一组User-Agent与sec-ch-ua指纹组合外加Sec-Fetch-*、Accept-Language等配套字段见 src/enhanced-content-extractor.ts。连续两次请求的指纹不同是最基础的反爬姿态。拿到 HTML 后提取器会先做低质量内容检测内容不足 100 字符、出现Please enable JavaScript、captcha、unusual traffic、robot等字样一律视为很可能被风控拦截抛出Low quality content detected - likely bot detection错误并转入回退判断src/enhanced-content-extractor.ts。 回退决策中枢哪些信号会触发无头浏览器是否升级武器由shouldUseBrowser方法统一裁决src/enhanced-content-extractor.ts。它像一个经验老到的爬虫工程师看三类信号信号类型具体表现含义HTTP 状态码403/429/503典型的风控拦截或限流错误消息timeout、Access denied、Forbidden连接层或权限层被拒响应内容含captcha、unusual traffic、robot、要求开启 JS页面根本没给你正文还有一个白名单直觉链接若属于twitter.com、facebook.com、instagram.com、linkedin.com、reddit.com、medium.com这类重度 JS 渲染站点直接预判 axios 难有作为果断切浏览器——因为它们的正文本来就是 JS 动态生成的HTTP 请求拿到的往往只是一具空壳。 反检测伪装无头浏览器的四层人格真正精彩的部分来了。当无头浏览器登场时web-search-mcp 给它套上了层层伪装目标只有一个别被发现是机器人。 浏览器池轮换使用 健康检查浏览器实例由 src/browser-pool.ts 统一管理默认在chromium与firefox之间轮换使用可通过BROWSER_TYPES加入webkit池子默认 3 个实例MAX_BROWSERS。每次取用前先做健康检查试探性创建并关闭一个 context坏掉的实例会被清退重建避免僵尸浏览器污染后续请求。 指纹随机化每次请求都是另一个人每个浏览器上下文都会随机拼装一套数字身份src/enhanced-content-extractor.tsUser-Agent从 5 个真实 UAChrome 121 三平台 Firefox 122 双平台中随机抽取视口1920×1080、1366×768、1440×900 等 5 种常见分辨率随机其一时区纽约、洛杉矶、伦敦、柏林、东京等 6 个真实时区随机其一设备特性deviceScaleFactor1 或 2、hasTouch、isMobile均按概率随机Firefox 会自动跳过不支持的isMobile选项细节见 src/enhanced-content-extractor.ts。同一次访问换一个人站点很难把多次请求关联到一起。‍ 环境欺骗抹掉自动化痕迹Playwright 控制的浏览器有几个出厂破绽提取器通过一段 stealth 初始化脚本逐一抹平src/enhanced-content-extractor.ts破绽伪装手段navigator.webdriver标记为true覆写为undefined彻底隐藏navigator.plugins为空数组模拟出 5 个插件navigator.languages异常固定为[en-US, en]的自然取值通知权限查询暴露自动化特征拦截permissions.query对notifications返回defaultwindow.chrome.app/chrome.runtime缺失删除残留引用避免特征比对浏览器启动时还追加了--disable-blink-featuresAutomationControlled等参数src/browser-pool.ts直接禁用 Chromium 暴露自动化控制的 Blink 特性。️ 行为拟人与效率优化拟人行为页面加载后执行一次随机坐标的鼠标移动再随机停留 0.5~1.5 秒并短暂等待article/main等正文选择器出现src/enhanced-content-extractor.ts模拟人类看了一眼页面的节奏拦截无关资源图片、字体、媒体类请求直接 abort页面秒开、流量减半src/enhanced-content-extractor.tsHTTP/2 故障自愈若导航抛出ERR_HTTP2_PROTOCOL_ERROR会重建一个带 HTTP/1.1 偏好头的上下文重试src/enhanced-content-extractor.ts——不少站点在 HTTP/2 通道上对客户端更敏感降级协议往往能起死回生。✂️ 拿到页面后清洗出纯正文两条车道最终都把 HTML 交给同一套清洗流水线src/enhanced-content-extractor.ts基于 cheerio 完成删噪音script、style、iframe等 20 余种非正文元素加上 30 多个导航 / 广告 / 弹窗 / 追踪类选择器.sidebar、.ads、.cookie-notice等成批清除找正文按article→main→[rolemain]→.content→.entry-content的优先级依次探测正文不足 100 字符则降级取body全文清文本去掉 base64 图片数据、图片 URL、cookie/privacy/copyright一类模板词压缩多余空白。产物是经过cleanText截断到MAX_CONTENT_LENGTH默认 50 万字符的纯文本附带预览与字数统计交给 LLM。⚙️ 稳定性工程并发、限流与容错并发抓取一次搜索结果的多条 URL 并行提取每条任务叠加双保险超时——内部 6 秒、外层Promise.race8 秒杜绝单页卡死全队src/enhanced-content-extractor.ts超量采样实际抓取量按2 × 目标数上限 10准备失败几条仍有富余PDF 链接会经 src/utils.ts 的isPdfUrl直接跳过全局限速所有搜索受 src/rate-limiter.ts 约束——每分钟最多 10 次请求、并发不超过 5对目标站点保持礼貌搜索层同样有三重回退Chromium 浏览器搜 Bing → Firefox 浏览器搜 Brave → axios 请求 DuckDuckGo HTML 端点每步限时 4 秒结果还会按相关性打分择优src/search-engine.ts优雅退出SIGINT/SIGTERM时统一关闭所有浏览器实例防内存泄漏src/index.ts。 快速上手与常用配置克隆仓库后三步完成构建浏览器由 Playwright 自动安装git clone https://gitcode.com/gh_mirrors/we/web-search-mcp cd web-search-mcp npm install npx playwright install npm run build然后在 MCP 客户端如 mcp.json中把command指向dist/index.js即可。这些环境变量最常被用到变量默认值作用MAX_CONTENT_LENGTH500000单条结果内容长度上限DEFAULT_TIMEOUT6000单页请求超时毫秒MAX_BROWSERS3浏览器池大小内存紧张可调 1BROWSER_TYPESchromium,firefox参与轮换的浏览器BROWSER_HEADLESStrue无头模式开关RELEVANCE_THRESHOLD0.3搜索结果质量门槛 写在最后web-search-mcp 的精髓在于把网页抓取的不确定性工程化axios 抢速度浏览器保下限伪装降低被拒率并发与限流兜住稳定性。双路回退让大多数请求保持轻量而多层反检测伪装则确保难啃的站点依然有解。如果你正在为本地 LLM 搭建联网能力这套先快后重、层层设防的内容提取范式本身就是一份值得抄作业的设计清单。赞分享人工智能MCP 服务【免费下载链接】web-search-mcpA simple, locally hosted Web Search MCP server for use with Local LLMs项目地址https://gitcode.com/gh_mirrors/we/web-search-mcp点击查看免费下载相关推荐终极解决axios浏览器兼容全攻略从IE到现代浏览器终极解决axios浏览器兼容全攻略从IE到现代浏览器 你是否遇到过axios在IE浏览器请求失败或在移动端某些浏览器出现跨域问题本文系统整理axios网络后端前端PowerToys Image Resizer 完整指南右键 3 步批量改尺寸100 张图几分钟搞定PowerToys Image Resizer 完整指南右键 3 步批量改尺寸100 张图几分钟搞定 手头有 30 张产品图要统一压成 1080×1080桌面应用开发工具Kanidm 内容安全策略CSP头设计解析浏览器路径的强制安全边界Kanidm 内容安全策略CSP头设计解析浏览器路径的强制安全边界 本文以 Kanidm 设计文档 content_security_policy.md后端认证鉴权安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑