VeilCrawler 的诞生源于一次对抖音 Web 端数据的采集需求。现代网页(如抖音、快手、小红书 等)的反爬虫机制相对复杂,传统的 HTTP 请求模拟(requests)面临着巨大的挑战:
- 复杂的参数签名 (Signature): JS 混淆、环境检测。
- 高强度的加密 (Encryption): 请求体和响应体加密。
为了绕过逆向工程的泥潭,通过AI进行全方位分析对比,我最终选择了 Python + Browser CDP 模式,基于 DrissionPage 或 nodriver 等自带反爬的库来开发采集引擎,避开 WebDriver 特征检测,拥有完整的系统权限(文件读写、进程控制)。
本项目主要是实现 浏览器扩展 (Extension) 方案 —— 直接利用浏览器渲染好的 DOM 和已签名的网络请求,这解决了“获取数据”的问题。
然而,单纯的浏览器扩展受限于沙箱环境 (Sandbox) 和文件系统权限,难以实现复杂的数据后处理(如批量下载无水印视频、大规模并发采集、自动化调度)。
因此,目前 VeilCrawler 定位为一款轻量级的“浏览器数据采集插件”。
注:本分析由 AI 生成,仅供参考。
| 维度 | VeilCrawler (本项目) | Web Scraper / Data Scraper | 八爪鱼 / 后羿采集器 | Python/Node.js 脚本 |
|---|---|---|---|---|
| 类型 | 开源浏览器扩展 | 浏览器扩展 | 商业桌面软件 | 编程脚本 |
| 上手难度 | ⭐ (极低) | ⭐⭐ (中等) | ⭐ (低,但界面复杂) | ⭐⭐⭐⭐⭐ (高) |
| 反爬能力 | ⭐⭐⭐ (基于浏览器,天然绕过签名) | ⭐⭐⭐ | ⭐⭐⭐ (内置浏览器) | ⭐ (需自行处理签名/指纹) |
| 自动验证码 | ❌ 不支持 (需人工辅助) | ❌ 不支持 | ✅ 支持 (部分付费功能) | ✅ 支持 (需对接打码平台) |
| 轻量级 | ✅ 侧边栏沉浸式体验 | ❌ 独立的 DevTools 面板 | ❌ 庞大的安装包 | ✅ 代码轻量 |
| API 拦截 | ✅ 支持 (重点特性) | ❌ 仅支持 DOM | ❌ 较弱 | ✅ 支持 (需逆向) |
| 数据后处理 | ❌ 弱 (受限沙箱) | ❌ 弱 | ✅ 强 (内置清洗/导出) | ✅ 强 (任意库支持) |
| 费用 | 完全免费开源 | 基础免费 / 高级付费 | 免费限制多 / 订阅昂贵 | 免费 |
VeilCrawler 的独特优势:
- 侧边栏交互: 不占用空间,操作更符合直觉。
- API 优先: 特别强化对 JSON API 的拦截与解析(不止专注于 DOM)。
VeilCrawler 基于 Manifest V3 标准开发,支持所有基于 Chromium 内核的现代浏览器:
- ✅ Google Chrome (推荐)
- ✅ Microsoft Edge
- ✅ Brave
- ✅ Arc
- ✅ 其他 Chromium 内核浏览器
- 🎯 可视化元素选择:
- 鼠标点击页面元素,自动生成 CSS/XPath 选择器。
- 支持选择文本、HTML、链接 (href)、图片 (src) 等属性。
- 智能高亮预览,所见即所得。
- 📋 多任务管理:
- 创建、编辑、删除多个采集任务。
- 任务配置自动保存到本地存储。
- 支持导入/导出任务配置(单个或批量备份),便于分享和迁移。
- 🔄 智能翻页系统:
- 滚动翻页: 自动滚动页面加载更多数据(适用于无限滚动页面)。
- 点击翻页: 可视化选择“下一页”按钮,自动点击翻页。
- 支持自定义翻页间隔和最大采集数量限制。
- 🧹 数据清洗与去重:
- 智能去重: 默认开启去重功能,防止重复采集。
- 自定义主键: 支持指定一个或多个字段作为“联合主键”,精准控制去重逻辑。
- 📡 JSON API 拦截:
- 拦截页面发出的 Ajax 请求。
- 可视化浏览 JSON 响应结构。
- 点击 JSON 字段自动生成提取规则(适用于前后端分离网站)。
- 💾 数据导出:
- 支持导出为 JSON 或 CSV 格式。
- 支持一键复制到剪贴板。
如果您不想自行编译代码,可以直接下载 Release 页面发布的安装包。
- 前往本项目的 Releases 页面。
- 下载最新版本的
.crx文件或dist.zip压缩包。 - 安装步骤:
- 打开 Chrome 浏览器,在地址栏输入
chrome://extensions/并回车。 - 在右上角开启 "开发者模式" (Developer mode)。
- 如果是 .crx 文件: 将下载的文件直接拖拽到该页面即可安装(部分新版 Chrome 可能限制拖拽安装,建议使用压缩包)。
- 如果是 .zip 文件: 解压文件,点击页面左上角的 "加载已解压的扩展程序",选择解压后的文件夹。
- 打开 Chrome 浏览器,在地址栏输入
git clone https://github.com/erma0/VeilCrawler.git
cd VeilCrawler
pnpm installpnpm build构建完成后,会在项目根目录生成 dist 文件夹。
- 打开 Chrome 浏览器,访问
chrome://extensions/。 - 在右上角开启 "开发者模式"。
- 点击左上角的 "加载已解压的扩展程序"。
- 选择项目目录下的
dist文件夹。
- 打开面板: 点击浏览器右上角的 VeilCrawler 图标打开侧边栏面板。
- 新建任务: 点击
+号,输入任务名称和目标网址(或直接使用当前页面)。 - 选择元素:
- 进入“配置”标签页。
- 点击 "选择元素" 按钮。
- 鼠标移动到页面上想要采集的数据(如商品标题),点击选中。
- 在面板中修改字段名称(如
title),选择属性(如innerText)。 - 重复此步骤添加价格、图片等其他字段。
- 设置翻页 (可选):
- 在“翻页模式”中选择 "点击" 或 "滚动"。
- 如果是点击翻页,点击 "选取" 按钮,然后在页面上点击“下一页”按钮。
- 运行采集:
- 点击 "运行采集"。
- 扩展会自动翻页并收集数据。
- 采集完成后,可以预览数据并导出。
适用于前后端分离、数据由 AJAX 请求加载的动态网站。相比 DOM 采集,直接采集 API 数据通常更纯净、更稳定。
- 切换模式: 在任务配置页顶部,切换数据源为 "JSON 数据"。
- 设置拦截:
- 输入 "拦截 URL" 特征词(支持
*通配符)。 - 例如:目标接口为
https://api.example.com/v1/products?page=1,可填/products或*/api/products*。 - 点击 "开始" 按钮启用拦截。
- 输入 "拦截 URL" 特征词(支持
- 捕获请求:
- 手动刷新当前网页或手动翻页获取新数据。
- 在面板的“网络请求”列表中会显示拦截到的符合规则的请求。
- 点击某个请求,下方会展开其 JSON 响应结构。
- 配置字段:
- 在 JSON 树形视图中,展开节点寻找目标数据。
- 点击想要采集的字段(如
title,price),或点击右侧出现的 "+ 选择" 按钮。 - 系统会自动生成提取路径(如
data.list[*].title)。
- 运行采集:
- 自动刷新: 如果开启了“刷新”选项,点击运行后系统会自动刷新页面以从头开始采集,若关闭此选项则从当前位置继续采集(此时需手动触发一次请求,如翻页或点击某按钮弹出数据页)。
- 翻页支持: JSON 模式同样支持“点击”或“滚动”翻页。配置翻页后,系统会在翻页动作触发新请求时自动拦截并提取数据。
- 导出: 点击任务列表上方的 "📦" (批量导出) 按钮,系统会将当前所有任务及其规则打包成一个
.json文件。 - 用途: 适用于全量数据备份,防止浏览器缓存清除导致数据丢失。
- 导出: 在任务卡片上,点击 "下载" 图标。
- 用途: 生成仅包含该任务配置的
.json文件,方便发送给同事或在不同设备间迁移特定任务。
- 本地导入: 点击任务列表上方的 "上传" 图标,选择备份的
.json文件即可恢复。 - URL 导入: 点击 "🔗" 图标,输入远程 JSON 文件的 URL(需支持跨域访问),可直接加载配置。
默认情况下,VeilCrawler 会对采集到的数据进行去重。
- 自动去重: 系统会比较每一行数据的所有字段。
- 自定义主键: 在字段配置列表中,你可以勾选一个或多个字段的“主键”选项。勾选后,系统将仅根据这些字段的组合值来判断数据是否重复(例如仅根据
id或url去重)。
- 滚动翻页: 适合“瀑布流”网站(如小红书笔记列表、图片站)。
- 点击翻页: 适合有明确“下一页”按钮的网站(如传统的电商列表、论坛)。
- 间隔设置: 建议保留为空(智能模式),系统会自动检测网络请求和 DOM 变化。如果遇到采集过快或卡顿,可手动设置固定间隔(如
1000ms)。
Q: 为什么在 JSON 模式下拦截不到请求? A: 请检查以下几点:
- 拦截 URL 是否正确?尝试使用更短的关键词或
*通配符。 - 是否点击了“开始”拦截按钮?
- 页面是否真的发送了 XHR/Fetch 请求?部分网站可能使用 SSR(服务端渲染),此时请使用 DOM 模式采集。
Q: 为什么采集到的数据是空的? A:
- DOM 模式: 可能是选择器失效,或者页面结构发生了变化。尝试重新选择元素。
- JSON 模式: 可能是提取路径错误。请确保预览区域能看到数据。
Q: 如何导出所有任务配置? A: 在任务列表页,点击上方的“批量导出备份”按钮(📦 图标),可以生成包含所有任务和规则的 JSON 文件。
VeilCrawler 是一款本地优先的浏览器扩展:
- 数据存储: 所有采集规则和采集到的数据均存储在您的浏览器本地 (
chrome.storage.local)。 - 网络通信: 扩展仅拦截您指定的网站请求以进行数据提取,绝不会将您的数据上传到任何第三方服务器。
- 代码开源: 本项目完全开源,欢迎审查代码以确保安全。 。
本工具仅供技术研究和学习使用,旨在简化合法的数据采集流程。
- 合法合规: 请勿使用本工具从事任何非法活动(如侵犯个人隐私、窃取商业机密、破坏网站服务等)。
- 遵守协议: 在采集网站数据时,请务必遵守目标网站的
robots.txt协议及相关服务条款 (ToS)。 - 责任自负: 使用者需自行承担因使用本工具而产生的一切法律责任。作者不对任何因使用本工具导致的损失或法律纠纷负责
# 安装依赖
pnpm install
# 监听模式开发 (文件变更自动重新构建)
pnpm dev
# 生产环境构建
pnpm buildsrc/
├── popup/ # 侧边栏/弹窗 UI (React)
│ ├── App.tsx # 主应用逻辑
│ ├── main.tsx
│ └── styles.css
├── content/ # Content Script (页面注入脚本)
│ └── index.ts # 处理元素选择、高亮、DOM 数据提取
├── background/ # Service Worker
│ └── index.ts # 处理跨域请求、Tab 管理
├── injected/ # 注入页面的拦截脚本
│ └── interceptor.ts # XHR/Fetch 拦截
├── utils/ # 工具函数
├── icons/ # 图标资源
├── types.ts # TypeScript 类型定义
└── manifest.json # Chrome 扩展清单 V3
- DOM 元素可视化选择
- 自动翻页 (点击/滚动)
- 数据预览与导出 (JSON/CSV)
- 任务导入/导出功能
- 数据去重与主键设置
- JSON API 模式拦截与提取
- 定时采集任务
MIT
