Skip to content

erma0/VeilCrawler

Repository files navigation

VeilCrawler - 可视化 Web 数据采集助手

VeilCrawler Logo

💡 项目背景与技术选型

初衷:解决“所见即不可得”的痛点

VeilCrawler 的诞生源于一次对抖音 Web 端数据的采集需求。现代网页(如抖音、快手、小红书 等)的反爬虫机制相对复杂,传统的 HTTP 请求模拟(requests)面临着巨大的挑战:

  • 复杂的参数签名 (Signature): JS 混淆、环境检测。
  • 高强度的加密 (Encryption): 请求体和响应体加密。

技术选型

为了绕过逆向工程的泥潭,通过AI进行全方位分析对比,我最终选择了 Python + Browser CDP 模式,基于 DrissionPagenodriver 等自带反爬的库来开发采集引擎,避开 WebDriver 特征检测,拥有完整的系统权限(文件读写、进程控制)。

本项目主要是实现 浏览器扩展 (Extension) 方案 —— 直接利用浏览器渲染好的 DOM 和已签名的网络请求,这解决了“获取数据”的问题。

然而,单纯的浏览器扩展受限于沙箱环境 (Sandbox) 和文件系统权限,难以实现复杂的数据后处理(如批量下载无水印视频、大规模并发采集、自动化调度)。

因此,目前 VeilCrawler 定位为一款轻量级的“浏览器数据采集插件”

🤝 同类项目对比分析

注:本分析由 AI 生成,仅供参考。

维度 VeilCrawler (本项目) Web Scraper / Data Scraper 八爪鱼 / 后羿采集器 Python/Node.js 脚本
类型 开源浏览器扩展 浏览器扩展 商业桌面软件 编程脚本
上手难度 ⭐ (极低) ⭐⭐ (中等) ⭐ (低,但界面复杂) ⭐⭐⭐⭐⭐ (高)
反爬能力 ⭐⭐⭐ (基于浏览器,天然绕过签名) ⭐⭐⭐ ⭐⭐⭐ (内置浏览器) ⭐ (需自行处理签名/指纹)
自动验证码 不支持 (需人工辅助) ❌ 不支持 ✅ 支持 (部分付费功能) ✅ 支持 (需对接打码平台)
轻量级 ✅ 侧边栏沉浸式体验 ❌ 独立的 DevTools 面板 ❌ 庞大的安装包 ✅ 代码轻量
API 拦截 支持 (重点特性) ❌ 仅支持 DOM ❌ 较弱 ✅ 支持 (需逆向)
数据后处理 ❌ 弱 (受限沙箱) ❌ 弱 ✅ 强 (内置清洗/导出) ✅ 强 (任意库支持)
费用 完全免费开源 基础免费 / 高级付费 免费限制多 / 订阅昂贵 免费

VeilCrawler 的独特优势:

  1. 侧边栏交互: 不占用空间,操作更符合直觉。
  2. 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 字段自动生成提取规则(适用于前后端分离网站)。
  • 💾 数据导出:
    • 支持导出为 JSONCSV 格式。
    • 支持一键复制到剪贴板。

🚀 安装指南

方式一:下载已发布版本 (推荐)

如果您不想自行编译代码,可以直接下载 Release 页面发布的安装包。

  1. 前往本项目的 Releases 页面
  2. 下载最新版本的 .crx 文件或 dist.zip 压缩包。
  3. 安装步骤:
    • 打开 Chrome 浏览器,在地址栏输入 chrome://extensions/ 并回车。
    • 在右上角开启 "开发者模式" (Developer mode)
    • 如果是 .crx 文件: 将下载的文件直接拖拽到该页面即可安装(部分新版 Chrome 可能限制拖拽安装,建议使用压缩包)。
    • 如果是 .zip 文件: 解压文件,点击页面左上角的 "加载已解压的扩展程序",选择解压后的文件夹。

方式二:源码编译安装 (开发者)

前置要求

1. 下载源码并安装依赖

git clone https://github.com/erma0/VeilCrawler.git
cd VeilCrawler
pnpm install

2. 构建扩展

pnpm build

构建完成后,会在项目根目录生成 dist 文件夹。

3. 加载到 Chrome

  1. 打开 Chrome 浏览器,访问 chrome://extensions/
  2. 在右上角开启 "开发者模式"
  3. 点击左上角的 "加载已解压的扩展程序"
  4. 选择项目目录下的 dist 文件夹。

📖 使用手册

模式一:DOM 元素采集 (推荐)

  1. 打开面板: 点击浏览器右上角的 VeilCrawler 图标打开侧边栏面板。
  2. 新建任务: 点击 + 号,输入任务名称和目标网址(或直接使用当前页面)。
  3. 选择元素:
    • 进入“配置”标签页。
    • 点击 "选择元素" 按钮。
    • 鼠标移动到页面上想要采集的数据(如商品标题),点击选中。
    • 在面板中修改字段名称(如 title),选择属性(如 innerText)。
    • 重复此步骤添加价格、图片等其他字段。
  4. 设置翻页 (可选):
    • 在“翻页模式”中选择 "点击""滚动"
    • 如果是点击翻页,点击 "选取" 按钮,然后在页面上点击“下一页”按钮。
  5. 运行采集:
    • 点击 "运行采集"
    • 扩展会自动翻页并收集数据。
    • 采集完成后,可以预览数据并导出。

模式二:JSON API 采集 (推荐用于动态网站)

适用于前后端分离、数据由 AJAX 请求加载的动态网站。相比 DOM 采集,直接采集 API 数据通常更纯净、更稳定。

  1. 切换模式: 在任务配置页顶部,切换数据源为 "JSON 数据"
  2. 设置拦截:
    • 输入 "拦截 URL" 特征词(支持 * 通配符)。
    • 例如:目标接口为 https://api.example.com/v1/products?page=1,可填 /products*/api/products*
    • 点击 "开始" 按钮启用拦截。
  3. 捕获请求:
    • 手动刷新当前网页或手动翻页获取新数据。
    • 在面板的“网络请求”列表中会显示拦截到的符合规则的请求。
    • 点击某个请求,下方会展开其 JSON 响应结构。
  4. 配置字段:
    • 在 JSON 树形视图中,展开节点寻找目标数据。
    • 点击想要采集的字段(如 title, price),或点击右侧出现的 "+ 选择" 按钮。
    • 系统会自动生成提取路径(如 data.list[*].title)。
  5. 运行采集:
    • 自动刷新: 如果开启了“刷新”选项,点击运行后系统会自动刷新页面以从头开始采集,若关闭此选项则从当前位置继续采集(此时需手动触发一次请求,如翻页或点击某按钮弹出数据页)。
    • 翻页支持: JSON 模式同样支持“点击”或“滚动”翻页。配置翻页后,系统会在翻页动作触发新请求时自动拦截并提取数据。

💾 备份与迁移 (导入/导出)

1. 批量备份 (推荐)

  • 导出: 点击任务列表上方的 "📦" (批量导出) 按钮,系统会将当前所有任务及其规则打包成一个 .json 文件。
  • 用途: 适用于全量数据备份,防止浏览器缓存清除导致数据丢失。

2. 单个任务分享

  • 导出: 在任务卡片上,点击 "下载" 图标。
  • 用途: 生成仅包含该任务配置的 .json 文件,方便发送给同事或在不同设备间迁移特定任务。

3. 导入配置

  • 本地导入: 点击任务列表上方的 "上传" 图标,选择备份的 .json 文件即可恢复。
  • URL 导入: 点击 "🔗" 图标,输入远程 JSON 文件的 URL(需支持跨域访问),可直接加载配置。

🔧 进阶技巧

1. 数据去重与主键

默认情况下,VeilCrawler 会对采集到的数据进行去重。

  • 自动去重: 系统会比较每一行数据的所有字段。
  • 自定义主键: 在字段配置列表中,你可以勾选一个或多个字段的“主键”选项。勾选后,系统将仅根据这些字段的组合值来判断数据是否重复(例如仅根据 idurl 去重)。

2. 翻页模式选择

  • 滚动翻页: 适合“瀑布流”网站(如小红书笔记列表、图片站)。
  • 点击翻页: 适合有明确“下一页”按钮的网站(如传统的电商列表、论坛)。
  • 间隔设置: 建议保留为空(智能模式),系统会自动检测网络请求和 DOM 变化。如果遇到采集过快或卡顿,可手动设置固定间隔(如 1000 ms)。

❓ 常见问题 (FAQ)

Q: 为什么在 JSON 模式下拦截不到请求? A: 请检查以下几点:

  1. 拦截 URL 是否正确?尝试使用更短的关键词或 * 通配符。
  2. 是否点击了“开始”拦截按钮?
  3. 页面是否真的发送了 XHR/Fetch 请求?部分网站可能使用 SSR(服务端渲染),此时请使用 DOM 模式采集。

Q: 为什么采集到的数据是空的? A:

  • DOM 模式: 可能是选择器失效,或者页面结构发生了变化。尝试重新选择元素。
  • JSON 模式: 可能是提取路径错误。请确保预览区域能看到数据。

Q: 如何导出所有任务配置? A: 在任务列表页,点击上方的“批量导出备份”按钮(📦 图标),可以生成包含所有任务和规则的 JSON 文件。

🔒 隐私声明

VeilCrawler 是一款本地优先的浏览器扩展:

  • 数据存储: 所有采集规则和采集到的数据均存储在您的浏览器本地 (chrome.storage.local)。
  • 网络通信: 扩展仅拦截您指定的网站请求以进行数据提取,绝不会将您的数据上传到任何第三方服务器。
  • 代码开源: 本项目完全开源,欢迎审查代码以确保安全。 。

⚠️ 免责声明

本工具仅供技术研究和学习使用,旨在简化合法的数据采集流程。

  1. 合法合规: 请勿使用本工具从事任何非法活动(如侵犯个人隐私、窃取商业机密、破坏网站服务等)。
  2. 遵守协议: 在采集网站数据时,请务必遵守目标网站的 robots.txt 协议及相关服务条款 (ToS)。
  3. 责任自负: 使用者需自行承担因使用本工具而产生的一切法律责任。作者不对任何因使用本工具导致的损失或法律纠纷负责

🛠️ 开发指南

# 安装依赖
pnpm install

# 监听模式开发 (文件变更自动重新构建)
pnpm dev

# 生产环境构建
pnpm build

项目结构

src/
├── 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

📝 待办事项 (Roadmap)

  • DOM 元素可视化选择
  • 自动翻页 (点击/滚动)
  • 数据预览与导出 (JSON/CSV)
  • 任务导入/导出功能
  • 数据去重与主键设置
  • JSON API 模式拦截与提取
  • 定时采集任务

📄 License

MIT

About

轻量可视化通用web数据采集插件

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages