让 Claude Code 自己去 1688 采数据,再给产品打分:两天实验记录

2025 年 11 月初,我用 Claude Code 加两个 MCP 工具,在 1688 上把"一句话采集商品到 Excel"跑通,又把选品打分做成了一个 skill。记一下真实的过程、两条采集路径各自的坑,和搜索框乱码那个教训。

去年 11 月我在给公司做一套跨境电商的精铺方案,第一层是供应端采集,第二层是 AI 选品。方案写完之后我想知道一件事:这两层能不能不写传统爬虫,直接让 Claude Code 去操作浏览器、读网页、写 Excel。于是 11 月 4 日和 5 日花了两天,在 C:\diaoY 下建了 01(采集)和 02(选品)两个目录,把这条链路从头跑了一遍。结论是能跑通,但过程里有几处和我预想的不一样,值得写下来。

笔记本上同时开着 1688 首页和 Claude Code 终端,搜索框里是手动填进去的"玻璃水"
图 0:11 月 5 日中午的桌面。左边是 1688 首页,右边是 Claude Code 正在用 Chrome DevTools MCP 往搜索框里填"玻璃水"。

最后跑起来是什么样

先说结果。在 01 目录里打开 Claude Code,说一句"爬取 1688 的玻璃水数据",它会开一个真实的 Chrome 窗口,到 1688 首页搜索,点进前几个商品,把标题、价格、供应商、所在地、商品链接、主图地址抄下来,用 openpyxl 写成一个带蓝色表头、自动列宽、冻结首行的 xlsx,放在 data/supply/ 下。触发方式有三种,其实是同一件事:

  • 直接在对话里说;
  • 调用项目里的 skill 1688_scraper,它把关键词、数量、字段、输出格式都固定下来;
  • 从 PowerShell 启动时把任务带上,claude "爬取1688汽车脚垫数据并保存到Excel",加 -p 就是非交互模式,跑完退出。
PowerShell 里直接把任务当参数启动 Claude Code
图 1:从命令行启动时直接传任务描述。Claude Code 会先读项目里的 CLAUDE.md,所以搜索方法这类规则不用每次重复。

当时用的是 Claude Code 2.0.32,模型 Sonnet 4.5。

两条采集路径

整个链路里真正干活的是两个 MCP 工具,各走一条路。

Chrome DevTools MCP 的调用序列:navigate、wait_for、click、list_pages、select_page
图 2:路径 A。Claude Code 通过 Chrome DevTools MCP 打开搜索页,等"价格"出现,点第一个商品,发现开了新标签页,切过去读详情。每一步都是真实的浏览器操作。

路径 A 是 Chrome DevTools MCP。它开的是真浏览器,JavaScript 渲染的内容都在,可以点进详情页,所以能拿到商品 ID、主图、销量这些列表页上没有的东西。代价是慢,一个商品就是一次点击、一次等待、一次快照,而且会撞 1688 的登录墙。4 日晚上我让它再采一次汽车脚垫,搜索页直接跳到了登录页。

路径 B 是 Firecrawl MCP。它不开浏览器,把搜索列表页抓成一段 markdown 文本返回。好处是快,几秒钟,而且带缓存,登录页挡住的列表它仍然能给出来(返回里有 cacheState: "hit")。坏处是你拿到的是一整段把标题、价格、成交量、供应商全挤在一起的文字,得靠正则去切。

Firecrawl 返回的一整段商品文本,和用正则切出 6 个产品的脚本
图 3:路径 B。Firecrawl 把 1688 搜索页压成一段纯文本,脚本用"¥ 数字"和"……公司"做锚点切出 6 条。日志里的乱码是 Windows 控制台编码问题,不影响数据。

那次用 Firecrawl 切出来 6 个汽车脚垫,价格 60 到 200 元,平均 111.33 元,但产品 ID 全是 unknown_1 这种临时值,也没有主图。两条路径的取舍就是这样:要完整字段走 Chrome,要快和绕登录走 Firecrawl。

采集层两条路径和选品层两个 skill 的数据流
图 4:整条链路。左边是 01 采集层,一句话进 Claude Code 后分成 Chrome DevTools 和 Firecrawl 两条路,汇到同一个 ExcelWriter;右边是 02 选品层,/analyze 负责找到对的 Excel,/ai-selection 负责逐个打分。

第一张 Excel 长什么样

4 日下午五点多,MCP 配置修好之后的第一次成功运行,采了 6 个汽车脚垫:25 到 298 元,平均 122 元。

第一次跑出来的 Excel:产品 ID 多数是"未知",产品链接多数是"待补充"
图 5:第一张表。七列里有两列基本是空的:产品 ID 只有第一行是真的,链接只有第一行是真的,其余写着"未知"和"待补充"。

这张表诚实地暴露了问题。列表页上能看到的只有标题、价格、供应商和所在地,ID 和链接得进详情页才有,而第一次运行只进了一个。当天晚上再采汽车手机支架,5 个商品,1.28 到 6 元,这次逐个点进了详情页,表里多了材质、品牌、销量、真实的 detail.1688.com/offer/ 链接,5 个里有 2 个拿到了真实 ID。

手机支架那次的 Excel:有真实 ID、销量 10 万+、详情页链接,数据来源标为 1688_chrome_devtools
图 6:第二次的表。能看到 814537151201 这种真实商品 ID,销量 10 万+、41.2 万+,还有 data_source 一列记着这行是哪条路径采的。

接着我发现它默认不抓商品主图,就让它把 image_url 加成标准字段。做电商选品,图是绕不开的,这一步应该一开始就定下来。

搜索框乱码

5 日中午采玻璃水的时候出了一个很典型的问题。Claude Code 图省事,把关键词直接拼进搜索 URL 的 keywords= 参数里打开。页面是打开了,但搜索框里显示的是"鐜荤拑姘�",返回的商品是钳子。这是 UTF-8 字节被当成 GBK 解码的标准乱码,1688 搜索接口对这个参数的解码方式和浏览器默认的编码不一致。

我当时的原话是:

当你直接用传入链接的方式搜索"玻璃水"的时候,搜索框实际的内容是乱码,所以不要再在 1688 上面使用这种方式搜索,要使用真实的搜索框输入点击。(2025-11-05)

改法很朴素:先 navigate 到 1688 首页,take_snapshot 找到搜索框的 uid,fill 进"玻璃水",再 click 搜索按钮。本文封面那张照片就是这一刻。这条规则后来写进了 CLAUDE.md 和 skill 的说明里,否则下次它还会图省事。

玻璃水采集结果:6 个产品,平均 6.49 元,1.10 到 11.40 元,6 家供应商
图 7:改用真实搜索框之后的玻璃水结果。注意输出文件名是 1688_20251105_124124.xlsx,只有日期没有品类,这给第二天的选品层出了道题。

工具链被折腾了一圈

把两天的会话记录翻回去看,采集层的实现方式换了四次。

一开始 Claude Code 按架构文档写了一个 Python 版的 Firecrawl API 爬虫,main.py 带参数跑。1688 的搜索页对它来说太重,什么都没抓到。然后它开始绕着 API key 打转,想再写几个脚本,我把脚本删了,说得很直接:Firecrawl MCP 和 Chrome DevTools MCP 在这台机器上已经配好了,就在 Claude Code 这个窗口里直接调,禁止再写 Python。它找了一阵才发现 MCP 配置在我的用户根目录下是全局的。

MCP 调通之后,Chrome 路径先跑成了,于是项目被改写成 Chrome DevTools 版,加了主图抓取。晚上撞登录墙,试了 Firecrawl,也成了,于是又加了 Firecrawl 版和一份工作日志。5 日上午我让它把流程固定下来、删掉废弃文件、做成 skill,它删了六个 Python 文件和三份文档,宣布"只保留 Firecrawl MCP 标准流程"。

清理后的 01 目录结构:一个 skill、config、processors、storage/excel_writer.py、parse_firecrawl_data.py
图 8:5 日上午清理之后的目录。Chrome 版的 scraper 代码被删了,剩下 skill、Excel 写入器和 Firecrawl 解析脚本。

然后同一天中午采玻璃水,我说的是"自动调用 Chrome DevTools 进行爬取",它又用回了 Chrome,而且 Chrome 路径根本不需要那些被删的 scraper 类,MCP 工具本身就是接口。所以最后真正留下来的东西其实很少:一份写着"关键词必须走真实搜索框"的规则,一个把列表页文本切开的正则脚本,和一个能把任何字典列表写成好看 xlsx 的 excel_writer.py。

我从这一圈里学到的是,让 agent 直接用工具和让 agent 写脚本是两条路,前者在这种一次几条数据的探索阶段明显更划算,而 agent 的默认倾向是写脚本。还有一点,文档比代码更容易被"整理"过头:它在清理时把 Chrome 路径从文档里抹掉了,可那条路径当天下午就又用上了。

选品层:从 API 调用改成一个大 skill

02 目录是 5 日下午搭的。架构文档里最初的设计是一个 Python 主程序,拿 Excel 里的产品去调 Claude 和 GPT-4o 的 API 做分析,再算利润和评分。第一版照着做了,但我很快改了主意:既然已经在 Claude Code 里,为什么还要在 Python 里再调一次 Claude 的 API?于是整层重构成两个 skill,AI 的部分直接由当前会话推理,Python 只做纯计算。

02 目录重构前后:旧架构 Python 主导加 API 调用,新架构 Claude Code skill 主导加 Python 工具
图 9:重构前后的对比和新的文件结构。.claude/commands/ 下两个 skill 是流程,utils/ 下三个 Python 文件是计算器。

第一个 skill 是 /analyze,它解决的是"分析哪个文件"。采集层输出的文件名只有日期,1688_20251105_124124.xlsx 看不出里面是玻璃水还是脚垫。最初的做法是按文件名猜,我否了;改成读每个文件前几条标题,我也否了,因为采集时是按品类采的,一个文件里本来就全是同一种东西,读几条不如读全部。最后定下来的规则是:读每个 Excel 的全部标题,按一张关键词表统计覆盖率,覆盖率 80% 以上直接推荐,50% 到 79% 给警告,再低就把所有文件列出来让人选。

/analyze 的匹配流程和关键词映射表:脚垫、玻璃水、手机支架各对应一组中英文关键词
图 10:匹配规则和关键词表。玻璃水对应"玻璃水、雨刷、windshield、washer fluid、清洁剂、防冻"这一组,哪个文件里这些词的覆盖率高,就是它。

第二个 skill 是 /ai-selection,拿到确认过的文件之后逐个产品走一遍:产品匹配、销量预测、认证检测这三项由 Claude 推理,利润和综合评分由 profit_calculator.py 和 scoring_engine.py 算,三个 Python 工具都支持命令行加 JSON 输出,方便单独测。门槛沿用了方案里的选品规则:不算广告的毛利率不低于 35%,单平台单国家日销不低于 0.55 件(也就是年销 200 件),售价落在 35 到 150 美元,综合分 70 以上入选,需要认证的产品单独出一张表。

文档里设计的六步流程:描述任务、理解意图、找到文件、确认、逐个分析、输出结果
图 11:skill 文档里写的六步交互。注意这是设计稿,里面"15 个产品、推荐 7 个"是示例数字。

这里得说清楚一件事:02/data/selection_results/ 到现在还是空的。两天里我测过读取 01 的玻璃水 Excel、测过意图识别和文件匹配,但没有留下一次完整跑完批量打分的结果文件。所以选品层是"搭好了、单步验证过",不是"验证过产出"。批量并发当时也没做,文档里写的是将来用 subagent。

局限

规模。每次运行就几条数据,详情页是一条一条点的,这个方法适合验证字段和流程,不适合每天上千条的采集。方案里写的日采 1000 到 5000 条,靠这种交互式路径做不到。

登录和反爬。1688 的搜索页会跳登录,Firecrawl 的缓存只能救列表页。第二天我在亚马逊和沃尔玛上碰到了人机验证,沃尔玛一旦进入验证页面就得整个关掉 Chrome 重开,那是另一篇的内容。

编码。关键词走 URL 参数这类"捷径"要明确禁止,写进 CLAUDE.md,否则 agent 每次都会想试。

速度。选品层文档里的目标是每分钟 1 到 2 个产品,因为每个产品都是一轮推理。

数据只能用于自己的调研,遵守平台条款,频率别太高,这些就不展开了。

两天下来,采集这一层我觉得已经够用了:一句话,几分钟,一张能直接打开看的表。选品那层要真正有用,还差一次完整的批量运行和一份真实的结果,这件事后来被更紧急的竞品监控插了队,到现在还欠着。

// ABOUT THE AUTHOR · TANG
色彩科学(Color Science)专业出身,日常从事软件开发、AI Agent 与嵌入式硬件工程,同时负责科技领域的 VC 金融投资与技术尽职调查(Due Diligence)。习惯用实测数据、第一性原理与可复现的工程细节说话。
← 上一篇 比 Vibe Coding 键盘更进一步:把 Claude Code 塞进便携微型键盘与彩色电子纸 下一篇 → 没有 U 盘,没有屏幕:在 WSL2 里给 AGX Thor 线刷系统的八次尝试