1. 项目概述:Maxun 到底是什么
如果你对爬虫的印象还停留在"写 Python 代码、用 requests 抓接口、解析 HTML、处理 cookie 和 token"这一套流程,那 Maxun 可能会让你重新认识"抓数据"这件事。
Maxun 是一个开源的、不需要写代码的网页数据采集工具。你只需要在浏览器里像正常人浏览网页一样操作一遍——点几下、翻几页、选中你想抓的内容——它就会把你的操作录制成一条自动化流程,之后自动帮你完成数据采集。简单说,它把爬虫从"写代码"变成了"录操作"。
这个项目目前在 GitHub 上有相当高的关注度,定位是 no-code 爬虫平台,也就是说它的目标用户不只是程序员。做市场调研的运营、整理商品价格的电商从业者、采集公开数据的分析师、甚至只是想把某个网站的信息定期保存下来的普通用户,都能用得上。
不过我得先把话说清楚:Maxun 没有把爬虫这件事变成"零成本"。它省掉的是写代码的动作,但爬虫该有的底层逻辑——网页结构分析、元素定位、翻页处理、防反爬策略——你依然得懂一点。所以这篇博文不会只停留在"安装一下就能用"的表面,我会从原理到实操,把 Maxun 的真实能力边界、部署方式、使用技巧和踩坑记录一次讲透。
我在实际部署和使用过程中踩了不少坑,也找到了一些文档里没写清楚的解法。这篇就当是给你的一份完整踩坑记录,照着走能省下不少时间。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 为什么需要 No-Code 爬虫:先搞清楚原理再上手
2.1 传统爬虫和可视化爬虫的本质区别
在聊 Maxun 之前,得先理清一个很多人容易混淆的问题:可视化爬虫和传统爬虫,到底差在哪?
传统爬虫(比如用 Python 写的那种)走的是"直接请求"路线。你分析目标网站的 HTTP 接口、构造请求头、带上 cookie、拿到 JSON 或 HTML 响应,再解析出你需要的数据。这套方案效率高、速度快,但有两个致命弱点:一是需要懂编程,二是很容易被反爬机制识别。尤其是现在前端渲染技术越来越普及,很多网站的数据根本不是静态 HTML,而是通过 JavaScript 动态加载的。这时候你光用 requests 根本拿不到数据,还得上 Selenium、Playwright 这类浏览器自动化工具,复杂度一下子提升了不少。
Maxun 走的是另一条路——浏览器录制回放。它内置了一个浏览器环境,你把操作录下来,它把你的点击、滚动、输入、翻页这些动作记录成步骤;到了执行阶段,它再自动打开浏览器,一步步重放你的操作并提取数据。换句话说,它本质上是一个带数据提取能力的浏览器自动化工具。
这个区别很关键。它意味着 Maxun 能处理传统爬虫最难搞定的那部分场景:纯前端渲染的页面、需要点击才能展开的内容、登录后才能看到的数据、复杂交互流程。因为这些操作本身就是"人怎么操作,它就怎么操作",几乎不会因为页面渲染机制而失效。
2.2 什么样的场景适合用 Maxun
根据我这段时间的实测,Maxun 在下面几类场景里表现出色,甚至比写代码还省事:
- 结构清晰的列表页抓取:比如商品列表、新闻列表、招聘信息、论文列表,只要页面结构稳定,录制一次就能批量采集。
- 需要登录才能访问的数据:Maxun 支持在录制流程中先完成登录步骤,之后每个任务都会先登录再采集,免去了自己维护 cookie 的麻烦。
- 需要点击交互才能看到的内容:比如点击"加载更多"、"展开全文"、切换 Tab 标签,这些在传统爬虫里要写额外代码处理的操作,录制时点一下就行。
- 定时抓取与变化监控:Maxun 支持定时执行采集任务,完成后还能把数据推送到 Webhook,适合做价格监控、内容更新提醒这类场景。
但它也不是万能的。遇到图片验证码、极验滑块、设备指纹识别这类高级反爬机制,Maxun 一样会被拦。还有一点,它在采集速度上比不过写代码的分布式爬虫——毕竟它每次都要真实打开浏览器、渲染页面、模拟人点击,单任务吞吐量有限。如果是要大规模采集几千万条数据,还是老老实实用 Python 或者专业爬虫框架,Maxun 更适合中小体量、重交互、重逻辑的场景。
2.3 和同类开源工具的对比
如果你在网上搜过 no-code 爬虫,应该还见过 BrowserFlow、Skyvern 这些名字。这里简单对比一下,方便你做技术选型:
| 工具 | 定位 | 核心优势 | 主要短板 |
|---|---|---|---|
| Maxun | 开源、可视化、录制回放 | 部署简单、OCR 辅助识别、双模式(手动/Robocoder)、有 Webhook | 文档尚不完善,社区较新 |
| BrowserFlow | 开源、云端 SaaS + 自托管 | 界面设计漂亮、AI 辅助元素识别、教程完善 | 部分高级功能收费,自托管配置较复杂 |
| Skyvern | AI 驱动爬虫 | 用 LLM 理解页面语义,自动推断操作 | 对 API Key 依赖强,体积大,部署较重 |
如果你只是想快速抓点数据,而且对数据的时效性要求不高,Maxun 是最容易上手的选择。如果说得再直白一些——Maxun 解决的痛点是"让没有编程基础的人也能用上爬虫",而不是"让爬虫变得比写代码更强"。
提示:OCR 辅助识别是 Maxun 的一个亮点。它集成了 OCR 能力来识别页面中的文本元素,这意味着即使某些元素没有标准的 HTML 属性,它也能通过视觉文本内容来定位,对动态渲染页面尤其友好。
3. 部署 Maxun:从 Docker 到本地运行
3.1 Docker 部署(推荐方式)
Maxun 官方推荐用 Docker 部署,这也是我的首选。一条命令搞定所有依赖,不用处理 Node.js 版本、数据库安装这些杂事。
先看官方提供的 docker-compose 配置:
yaml复制version: "3"
services:
maxun:
image: getmaxun/maxun:latest
ports:
- "5173:5173"
- "8000:8000"
volumes:
- maxun-data:/app/data
restart: unless-stopped
volumes:
maxun-data:
部署步骤:
- 在服务器上安装 Docker 和 Docker Compose。
- 把上面的配置保存成
docker-compose.yml。 - 执行
docker compose up -d启动。 - 浏览器访问
http://服务器IP:5173打开 Maxun 控制台。
这里有两个端口要说明一下:5173 是前端控制台,你用它来录制流程、管理任务、查看数据;8000 是后端 API 服务端口,实际上你也可以不暴露到公网。数据存在 Docker 卷 maxun-data 里,容器删了数据也还在,这点很重要。
我在一台 2 核 4G 的轻量服务器上跑过,内存占用不高,日常使用完全够。如果只是本地体验,直接用 Docker Desktop 就能跑起来。
3.2 从源码运行(适合二次开发)
如果你想基于 Maxun 做二次开发,可以从源码跑。官方仓库用的是 monorepo 结构,分服务端和客户端两部分:
bash复制# 克隆仓库
git clone https://github.com/getmaxun/maxun.git
cd maxun
# 安装依赖
npm install
# 启动后端(默认 8000 端口)
npm run start-backend
# 另开终端,启动前端(默认 5173 端口)
npm run start-frontend
源码部署对 Node.js 版本有要求,官方建议 Node 18 以上。另外需要 PostgreSQL 数据库,连接配置在环境变量里设置,默认会读取 .env 文件。
3.3 部署后的初始化配置
部署完成后不要急着录制任务,先把基础配置搞定:
- 注册一个管理员账号。本地部署的 Maxun 默认允许注册,如果你部署在公网服务器上,建议注册完成后立即关闭开放注册,避免别人往你服务器上塞采集任务。
- 确认 API 服务端口可达。前端录制和执行任务时,浏览器会直接调用后端 API,如果中间有 Nginx 反代,记得把
/api路径也代理过去。 - 检查服务器时间同步。定时任务依赖系统时间,如果服务器时间漂移,任务执行时间会不准。
我第一次部署时就是漏了 Nginx 反代的配置,结果前端能打开但录制好的任务一执行就报错,排查了半天才发现是 API 请求被拦截了。
4. 上手实操:创建你的第一个采集任务
4.1 完整流程演示:采集职位列表页面
为了演示,我以招聘网站的职位列表页为例,展示一下 Maxun 从录制到数据导出的完整链路。
第一步:新建一个任务,进入录制模式。Maxun 会打开一个内嵌浏览器窗口,你在这个窗口里的操作会被完整记录下来。这里注意,录制时不要着急,每一步操作之间稍微停顿一下,给页面渲染留出时间,不然回放时页面还没加载完,下一步操作已经执行了,就会出错。
第二步:在页面上定位你要抓取的数据。Maxun 的设计是"先录制操作,再标记数据"。你先把翻页、点击这些操作做完,然后在页面上选中你要抓的字段——比如职位标题、公司名称、薪资范围——右键或通过快捷面板把它们标记为数据节点。
第三步:设置翻页逻辑。这个很关键,Maxun 的翻页有两种配置方式。方式一是在录制过程中点击"下一页"按钮,它会记录这个点击操作,然后在执行时自动循环点击直到按钮消失;方式二是抓取"下一页"按钮的 URL 规律,通过拼接 URL 实现翻页。大多数场景用方式一就够了。
第四步:设置采集页数或条数限制。默认是无限抓取直到翻页结束,但在实际项目中通常要设置上限,比如"只抓前 5 页"。这能在系统设置里配置,也可以在任务的执行参数里临时指定。
第五步:执行任务并导出数据。任务执行完成后,采集到的数据会以表格形式展示在任务详情页,你可以直接在页面上预览、编辑,也可以一键导出为 CSV。Maxun 还支持设置 Webhook,任务执行完可以把数据 POST 到你指定的接口,实现自动化流程。
4.2 Robocoder 模式:让 AI 帮你生成爬虫流程
手动录制是 Maxun 的基础模式,它还有一个比较有意思的高级功能叫 Robocoder——通过自然语言描述你想采集的内容,让 AI 自动生成爬虫流程。
比如你输入"打开百度搜索'openai',把第一页所有搜索结果标题和链接抓下来",Robocoder 会尝试解析你的意图,自动打开对应网站、定位元素、生成提取规则。这个功能用下来感觉它的能力上限还不算稳定,简单场景成功率不错,但涉及复杂的业务逻辑时还是需要手动调整。
如果你想尝鲜,在创建任务时选择 Robocoder 模式,然后在输入框里用尽量清晰的语言描述你的需求——包括目标网站、抓取内容、翻页方式,每一条都越具体越好。AI 生成的流程会展示在界面里,你可以逐条编辑或删除步骤,调整完毕后保存运行。
4.3 把采集任务变成定时自动化
定时执行是我觉得 Maxun 最实用的功能之一。在任务列表里找到你想定时执行的任务,点击"定时"按钮,设置执行周期——支持每天、每周、每小时等常见维度,也可以选择"自定义 Cron 表达式"来精确控制。
定时任务执行完毕后的数据,可以配合 Webhook 推送到企业微信、钉钉、Slack 或自己的服务器。我是拿它做价格监控:每天早上 9 点自动跑一次商品价格采集,数据推送到我的 API 服务,服务里设置好价格阈值,低于预期就通知我。这套流程跑了一个多月,除了网站改版导致一次采集失败,基本没出过问题。
注意:定时任务依赖服务器持续运行。如果你的服务器会在夜间关机,或者 Docker 容器被重启了,定时任务就不会执行。建议给容器设置
restart: unless-stopped,确保意外重启后能自动恢复。
5. 进阶使用:选择器配置和数据清洗
5.1 理解 Maxun 的元素定位机制
用 Maxun 录制任务时会自动记住每个数据字段的定位方式,这个定位方式在 Maxun 里本质上就是 CSS 选择器或 XPath。当你标记一个字段后,Maxun 会基于该元素的 ID、class、属性或文本内容生成一个选择器,用来在每次执行时定位相同位置的数据。
这就会带来一个重要问题:选择器的健壮性直接决定任务的稳定性。如果目标网站改了页面结构,哪怕只是给某个 div 换了个 class 名,你的任务就可能抓不到数据。
录制完成后,建议进入任务编辑界面,检查每个字段自动生成的选择器。一般我会手动做两个优化:
- 把过长、过于绝对的选择器改成更短、更语义化的形式。比如
#job-list > div.list-item:nth-child(2) > div.title > a这种选择器,一旦列表顶部插入一条广告,nth-child的序号就全乱了。改成基于 class 的选择器div.list-item a.job-title会稳健很多。 - 给关键字段设置"正则匹配"或"文本替换"规则。Maxun 支持在字段层面对提取到的数据做清洗,比如去掉多余空格、提取数字部分、替换特定字符,这些规则在编辑字段时有配置入口。
5.2 抓取动态内容和无限滚动页面
很多现代网站用的是无限滚动加载,而不是传统的分页。这种页面在 Maxun 里稍微有点特殊——你不能简单地点击"下一页",而是要模拟"下拉到底部"这个动作。
实际处理方案是:在录制模式里,先滚动到页面底部,等待新内容加载,再滚动到底部,重复两三次。Maxun 会把这些滚动动作都记录下来,回放时任务会自动滚动加载直到触发你设定的停止条件。
但有个细节要注意:滚动太快会导致页面还没加载完就执行下一次滚动,数据会抓不全。我曾经抓一个社交媒体的列表页,前几次跑都只抓到 20 多条,后来才发现是滚动间隔太短。解决方法是保持录制时每秒滚动一次的节奏,并且在滚动后稍微等一下再滚下一次。页面加载稍慢的站点,建议把任务执行速度调低一些——在任务的高级设置里可以设置"操作间隔时间",单位是毫秒,一般设置 3000-5000 会比较稳。
5.3 数据字段类型:用对类型才能导对数据
Maxun 支持为每个字段指定类型,类型不同,提取和导出行为也不同。常见的几类:
| 字段类型 | 适用场景 | 说明 |
|---|---|---|
| 文本 | 标题、描述、公司名 | 基础类型,提取元素内文本 |
| 链接 | 详情页 URL、跳转地址 | 提取 href 属性值 |
| 图片 | 商品图、头像 | 提取图片 URL,支持批量下载 |
| 数字 | 价格、评分、数量 | 可配合数值比较做筛选 |
| HTML | 富文本内容 | 提取元素的 innerHTML,适合内容采集 |
字段类型设置错误,导出后还得二次清洗,这点容易踩坑。比如价格字段,如果你把它设置成"文本",导出的数据会带"¥ 1,299 /件"这种格式;设置成"数字"后,Maxun 会自动提取出 1299,后面你自己要做数值比较就省事了。
6. 常见问题与排查技巧实录
6.1 任务执行报错"元素未找到"
这是出现频率最高的一类问题,基本上都是元素定位失败导致的。排查思路按照下面的顺序来:
- 确认目标网站没有改版。对比一下录制时和现在的页面结构,最简单的办法是直接在浏览器里打开目标页面,右键检查,看看之前录制的那个元素还在不在、class 名有没有变。
- 检查任务是否有登录态。很多网站在未登录状态下和登录状态下页面结构不同。如果你的录制流程里包含了登录操作,确认执行时是同一个用户且登录有效。登录过期是日志里很常见的失败原因。
- 检查页面是否是懒加载。目标数据是否要滚动到可视区域才会渲染?如果是,需要在录制流程的前面补一个滚动操作。
- 检查选择器冲突。页面如果有多个相同 class 的元素,Maxun 可能定位到了第一个,但你想抓的是后面的。这种情况需要手动调整选择器。
6.2 翻页循环停不下来
翻页是无限循环的场景通常是因为停止条件没有生效。Maxun 在循环点击"下一页"的时候,如果页面结构让按钮一直存在(比如第一页和第二页各有一个"下一页"按钮,但第二页的按钮是禁用状态但没隐藏),它就会一直点下去。
解决办法:在翻页循环的配置里勾选"检测到相同元素时停止"这一类条件,或者手动指定最大翻页数。我的习惯是永远给翻页循环加上上限,即使页面结构正常也要加。一旦按钮样式异常,最多就是抓取不完整,总比无限循环把服务器资源耗尽好。
6.3 抓到的数据有大量重复
重复数据通常有两个来源:一是翻页过程中某一页被重复加载,二是页面本身存在"推荐"和"最新"两个列表,两个列表内容有交叉。排查时我是这么做的:先去任务详情页看数据采集日志,确认每个分页 URL 是否唯一;如果 URL 正常,就去检查字段标记是不是误选了两个列表区域。Maxun 本身没有数据去重功能,如果你是做价格监控这种对数据量敏感的场景,建议导出后自己在脚本里做一下去重。
6.4 采集速度慢,任务执行时间长
Maxun 每次任务都要真实打开浏览器渲染页面,再加上模拟人操作,速度肯定会比 API 直接请求慢得多。实测下来,抓取 10 个页面的列表数据,大约需要 3-8 分钟,具体看页面的耗时和网络情况。
如果觉得慢,有几个优化空间:一是降低操作间隔时间,但要保证页面能加载完成;二是拆分成多个任务并行跑,比如把 100 页拆成 4 个 25 页的任务同时执行;三是尽量控制数据集大小,不要选择无关的页面元素作为字段,每多一个字段就会多一次元素查找耗时。
6.5 常见问题速查表
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 界面能打开但任务执行失败 | API 端口未代理或防火墙拦截 | 检查 8000 端口的反代规则 |
| 数据抓不到,日志显示 403 | 目标站点反爬拦截 | 降低任务执行频率,增加随机等待 |
| 登录步骤失效 | 登录态过期或验证码 | 重新录制登录步骤,检查验证码策略 |
| 导出的 CSV 打开乱码 | 编码问题 | 用 UTF-8 编码打开或自行转码 |
| Docker 容器反复重启 | 端口冲突或资源不足 | 查看 docker logs maxun,排查具体报错 |
6.6 独家避坑经验
分享几个文档里几乎不会写的细节:
第一,录制任务时尽量选在目标网站访问量低的时段。网站高峰期响应慢,页面渲染超时会导致录制出的流程行为异常,这个异常会被原样记录下来。
第二,不要让 Maxun 和目标网站部署在同一台服务器上。采集行为本身就是对目标站点的访问,如果服务器 IP 被对方封了,换 IP 容易;但如果你连着把 Maxun 的服务器也封了,你的其他服务也要遭殃。
第三,定时任务执行频率不要设置得太激进。爬虫技术本身没有对错,但过于频繁的访问会给目标服务器增加不必要的负担,也更容易触发风控。做采集时保持克制,尊重目标网站的 robots.txt 和访问条款,这在任何场景下都是基本底线。
7. 扩展玩法:Maxun 能做什么
7.1 数据监控与告警
把 Maxun 和 Webhook 结合起来,可以实现很多有意思的监控场景。我的一个做法是:每天定时采集某个商品的售价,把价格数据推送到自己的脚本服务,脚本再和昨天的价格做对比,如果变动超过 5% 就推送告警。
这种方式比用现成的比价网站灵活得多——你可以监控任何你想监控的网站,设定任何你想设定的规则,数据完全掌握在自己手里。
7.2 和 Python 脚本联动
Maxun 不是封闭系统,采集到的数据可以通过 Webhook 送到任何地方。我自己搭建的数据管道是这样的:Maxun 定时抓取数据,推送到一个 Python FastAPI 服务,Python 服务负责数据清洗、去重、入库,最后通过 Redis 队列分发给下游任务。
这一套下来,Maxun 负责"读取网页数据"这块脏活累活,Python 负责数据处理和业务逻辑,分工明确,各取所长。
7.3 作为开源项目做二次开发
Maxun 的代码结构清晰,前后端分离,如果你想学习或者改造,可以从几个方向入手:
- 改 UI:前端用的是 React + Tailwind,想加个自定义仪表盘页面不是难事。
- 扩展存储:默认是 SQLite 还是 PostgreSQL 看版本,你完全可以替换成 MySQL 或别的存储。
- 接入自己的验证码识别服务:录制和执行过程中遇到验证码,可以在代码层面把验证码图片推送到自己的识别服务,处理完再返回结果。
8. 写在最后:一些经验和边界
Maxun 是我用过的开源 no-code 爬虫里,最容易落地的项目。它把爬虫从"程序员专属"拉到了"人人都能用"的层面,这个价值是实打实的。尤其是对于那些会浏览网页但不会写代码的人来说,它解决的不只是工具问题,更是能力边界的问题。
但这段时间用下来,我也越来越清楚它的边界在哪里。它不会取代程序员写的爬虫,也不会在你面对强反爬网站时变成万能钥匙。它更适合的是那些"结构化清晰、需要交互、体量中等"的采集场景——在这些场景里,它比写代码效率高得多。
如果你准备上手,我给你的建议是:先部署一个 Docker 实例,挑一个你熟悉的目标网站,从头到尾录一个完整任务,导出一次 CSV。这个过程走通了,你对 Maxun 的能力和限制就会有直观的感知,后面自己能发挥出多少,就看你的场景想象力了。
根据我自己的部署和采集经验,最稳定的用法是:把 Maxun 当成"网页数据读取器"用,只让它做浏览器自动化的事情,拿到数据后统统交给自己的脚本来处理。垂直分工,互相配合,这套方案目前在我的工作流里运行得很顺畅。
