惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
云风的 BLOG
云风的 BLOG
Microsoft Security Blog
Microsoft Security Blog
博客园 - 司徒正美
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
小众软件
小众软件
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
MyScale Blog
MyScale Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
A
About on SuperTechFans
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
B
Blog RSS Feed
G
Google Developers Blog
量子位
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
给大家分享一个,我用 Python 重写的一个完全免费的 5 引擎搜...
duanshiwen · 2026-06-01 · via V2EX

[开源] 各位大佬好,分享一个我最近折腾的项目。

起因是我在用 mrkrsl/web-search-mcp( TypeScript ,⭐ 910 )的时候,发现几个不太够用的地方:没有 Google 和百度、CAPTCHA 直接挂掉、页面提取绑死在搜索流程里……改着改着发现改动量太大了,索性用 Python 从头重写了一遍。

GitHub: https://github.com/duanshiwen/seach-mcp-craft-agent

和原版的核心区别

原版 (TypeScript) 改进版 (Python)
语言 TypeScript + JavaScript Python 3.10+
搜索引擎 Bing / Brave / DuckDuckGo Google / Bing / 百度 / DuckDuckGo / Yahoo
CAPTCHA ❌ 无处理 ✅ 自动检测 + 弹窗等待手动验证
浏览器管理 共享实例 全局队列锁 + per-engine 独立 profile
网页提取 绑在搜索流程里 独立 web_fetch 工具,auto/http/js 三种模式
百度 ✅ 浏览器 + HTTP 双保险
目标用户 本地 LLM ( LM Studio / LibreChat ) 所有 MCP 客户端

为什么用 Python 重写?

原版的引擎层、浏览器生命周期、CAPTCHA 处理等核心模块都绑在 JS 生态里。我的改动涉及这些底层,与其在原版上打补丁,不如用 Python 重写——httpx + selectolax 替代 Axios ,代码更简洁,后续加新引擎也方便。

两个核心改进

1. CAPTCHA 自动检测 + 手动验证

原版遇到 CAPTCHA 直接挂。我的版本用可见浏览器模式搜索,触发 CAPTCHA 时:

  • 自动检测到验证码页面
  • 用户在同一个浏览器窗口手动完成验证
  • 程序每 2 秒轮询,验证通过后自动提取结果并关闭窗口
  • 默认等待 300 秒超时,超时返回空结果并建议换引擎

每个引擎用独立的浏览器 profile ,不会污染你的日常 Chrome 。

2. 独立的 web_fetch 网页内容提取

原版的页面提取是绑在搜索流程里的,我把拆成了独立工具:

{
  "url": "https://example.com/article",
  "render_mode": "auto",
  "extract_mode": "markdown"
}
  • auto 模式先走轻量 HTTP ,检测到 JS-only 页面自动 fallback 到 Playwright
  • 自动去除广告、导航栏等干扰,提取正文
  • 超时上限 12 分钟,SPA 页面也能搞定

搜索完直接用 web_fetch 抓全文,不用再接别的工具。

为什么不用 SerpAPI / Brave Search API ?

这是做这个项目之前我自己纠结过的问题,说说我的判断:

SerpAPI:免费版每月 100 次搜索,付费版 $50/月起。对个人开发者做个 demo 够了,但跑 Agent 工作流每天可能就要几百次搜索,一个月下来成本不低。

Brave Search API:$5/1000 次请求,每月送 $5 额度(≈ 1000 次免费)。价格比 SerpAPI 友好很多,但问题是——它只能搜 Brave 的索引,结果质量和 Google 差距明显,尤其是中文内容。

Google Custom Search API:免费 100 次/天,超出 $5/1000 次。看似便宜,但 100 次/天对 Agent 来说杯水车薪,而且返回的结果不如直接浏览器搜索丰富。

我的选择:直接用浏览器搜索。

  • 结果最全最实时,和你手动打开浏览器搜的一样
  • 完全免费,没有调用限制
  • 支持 5 个引擎,不是只搜一个索引

代价是需要 Playwright 和真实浏览器,比 API 调用重一些。但对 Agent 工作流来说,搜索质量比速度更重要——你宁可多等 3 秒拿到准确结果,也不要秒回一个过时的摘要。

安装

git clone https://github.com/duanshiwen/seach-mcp-craft-agent.git
cd seach-mcp-craft-agent
uv sync  # 或 pip install -e .
playwright install chromium

MCP 客户端配置:

{
  "mcpServers": {
    "search-engine-mcp": {
      "command": "python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/seach-mcp-craft-agent"
    }
  }
}

使用示例

{
  "query": "Rust async best practices",
  "engine": "google",
  "max_results": 5
}

引擎选择建议:

  • 快速查询 → DuckDuckGo (轻量 HTTP ,1-3s )
  • 要最全结果 → Google (浏览器模式,3-10s )
  • 中文内容 → Bing 或百度

项目结构

src/
├── server.py            # MCP 服务主入口
├── engines/
│   ├── base.py          # HTTP 引擎基类
│   ├── browser_base.py  # 浏览器引擎基类( CAPTCHA 、队列锁、profile 隔离)
│   ├── google.py
│   ├── bing.py          # 浏览器 + HTTP fallback
│   ├── baidu.py         # 浏览器 + HTTP fallback
│   ├── duckduckgo.py
│   └── yahoo.py
├── fetcher.py           # web_fetch 实现
└── types.py / utils.py

加新引擎只需要继承对应基类、实现几个方法就行,README 里有详细说明。

碎碎念

做这个项目过程中的几个观察:

  1. JS 渲染是 2026 年搜索工具的门槛了。Google 的搜索结果甚至需要 JS 执行完才会出现,纯 HTTP 方案基本不可用
  2. 免费方案反而比付费 API 好用。直接浏览器搜结果最全最实时,API 受限太多
  3. 失败兜底比成功路径更重要。CAPTCHA 、超时、页面变化都是常态,双路渲染+队列管理这些"不性感"的设计才是稳定性的基石
  4. 感谢原作者 mrkrsl 的优秀工作

欢迎各位大佬试用提 PR ,有问题直接回复聊~