欢迎光临
我们一直在努力

SL-crawler:一个可视化配置的通用网页与 API 数据采集工具

在实际开发中,网页数据采集经常会遇到一些重复工作:

  • 需要反复编写 CSS 选择器或 XPath。
  • API 分页参数不统一。
  • 采集结果需要清洗、去重和增量过滤。
  • 动态网页需要浏览器渲染。
  • 大量数据不能一次性放入内存。
  • 采集任务需要定时执行和断点恢复。
  • 代理、Cookie、robots.txt 和 SSRF 等安全问题容易被忽略。

为了解决这些问题,我们开发了一个基于 Python 的可视化数据采集工具:SL-crawler。

项目地址:

GitHub – tomjoy248-crypto/InfoScraper · GitHub

最新版本 Release:

Releases · tomjoy248-crypto/InfoScraper · GitHub

一、项目定位

SL-crawler 不是一个针对某个网站定制的脚本,而是一个可视化配置的通用网页/API 数据采集工具。

用户可以通过 GUI 配置:

  • 起始 URL
  • CSS 选择器或 XPath
  • API 请求参数
  • JSONPath 字段
  • 分页规则
  • 数据清洗规则
  • 去重和增量字段
  • 代理池
  • Playwright 动态渲染
  • 定时采集任务
  • 数据导出格式

目前项目采用桌面 GUI 形式,普通用户不需要编写完整爬虫代码即可完成常见采集任务。

二、主要功能

1. 静态网页采集

支持使用 CSS 选择器和 XPath 提取网页内容。

例如页面中有如下结构:

<div class="item">
<span class="title">示例标题</span>
<a href="/detail/1">详情</a>
</div>

可以配置:

列表选择器:.item
标题字段:.title
链接字段:a

程序会自动遍历列表节点并生成结构化数据。

2. API 数据采集

支持 GET 和 POST API 请求,并可以配置:

  • 请求头
  • Cookie
  • JSON 请求体
  • 列表路径
  • 字段 JSONPath
  • page 分页
  • offset 分页
  • cursor 分页
  • next URL 分页

同时支持 API 流式解析模式,用于降低大 JSON 响应的内存压力。

3. 数据清洗

采集结果可以在写入数据库前进行清洗,例如:

  • 去除首尾空格
  • 删除 HTML 标签
  • 合并连续空白
  • 替换字符串
  • 统一字段格式

清洗在数据进入数据库之前完成,避免数据库中保存大量未处理数据。

4. 去重和增量采集

工具支持两种常见模式。

字段去重:

ID
URL
商品编号
文章链接

增量采集:

按 ID 判断是否已经采集
按 URL 判断是否已经采集
按时间字段判断是否已经采集

系统会查询历史记录中的字段值,过滤已经采集过的数据。

需要注意的是,增量采集最好明确配置字段。如果没有可用字段,程序不会擅自把整行数据当作去重键,以避免误删合法重复数据。

5. 流式数据处理

大数据量采集最容易出现的问题是内存不断增长。

SL-crawler 的处理流程设计为:

网络响应

逐条解析

逐条清洗

逐条去重

逐条写入 SQLite

GUI 只保留有限数量的预览数据,完整结果写入数据库中的 scrape_rows 表,避免一次性保存几十万条数据到 Python 列表。

6. SQLite 历史记录

采集结果保存在 SQLite 数据库中,支持:

  • 历史任务列表
  • 历史记录分页
  • 结果详情分页
  • 删除历史记录
  • 增量查询
  • 分批事务写入
  • WAL 模式
  • 数据库迁移

旧版本中使用的 data_json 字段也提供了迁移逻辑,可以将旧数据迁移到新的 scrape_rows 结构。

7. 定时任务

支持配置定时任务,例如:

每 5 分钟采集一次
每天定时采集一次

定时任务具有以下能力:

  • 任务持久化
  • 程序重启后恢复任务
  • 防止同一个任务重叠执行
  • 异步线程执行采集
  • 任务完成后释放运行状态
  • 任务失败后继续保留调度能力

定时任务恢复流程也加入了独立测试,避免出现“任务看起来恢复了,但只执行一次就永久停摆”的问题。

8. Playwright 动态网页

对于需要 JavaScript 渲染的页面,可以启用 Playwright。

支持:

  • domcontentloaded
  • load
  • networkidle
  • 页面崩溃检测
  • 页面自动重建
  • 登录失效检测
  • 验证码页面检测
  • 失败重试

需要说明的是,验证码无法通用自动破解,自动登录也需要根据具体网站提供登录脚本或回调。

9. 代理池

代理功能支持:

  • 添加代理
  • 删除代理
  • 代理健康检查
  • 延迟统计
  • 失败次数记录
  • 自动冷却
  • 失败后自动禁用
  • 成功后恢复
  • 延迟排序
  • 代理账号密码加密保存

代理地址存储在数据库中时会进行加密,历史明文代理也支持自动迁移。

10. 安全防护

项目在设计时加入了一些基础安全措施。

SSRF 防护

程序会限制:

  • 非 HTTP/HTTPS 协议
  • 本机地址
  • 回环地址
  • 内网地址
  • Link-local 地址
  • 保留地址
  • 不稳定 DNS 解析
  • DNS 重绑定
  • 代理跳转风险
robots.txt

默认启用 robots.txt 检查,并支持:

  • robots.txt 缓存
  • 缓存过期
  • 缓存数量限制
  • 404 时按无规则处理
  • 401/403 时禁止采集
  • 429 限流时停止
  • robots 请求使用采集 session、UA、代理和超时
Cookie 和代理信息保护

Cookie、Token、API Key、密码、代理账号等敏感信息支持:

  • Windows DPAPI 加密
  • 非 Windows 环境降级编码并警告
  • 日志脱敏
  • 异常信息脱敏
  • 导出脱敏
  • 配置文件加密
  • 数据库代理信息加密
导出安全

CSV 和 Excel 导出增加了公式注入防护。

例如:

=1+1
@SUM(1)
-2+3

导出时会自动转换为普通文本,避免打开文件时被 Excel 或 WPS 当作公式执行。

三、技术栈

项目主要使用以下技术:

Python
Tkinter
requests
curl_cffi
BeautifulSoup
lxml
Playwright
SQLite
openpyxl
ijson
PyInstaller
Inno Setup
GitHub Actions

其中:

  • requests 和 curl_cffi 用于 HTTP 请求。
  • curl_cffi 用于模拟浏览器 TLS 指纹。
  • BeautifulSoup 和 lxml 用于网页解析。
  • Playwright 用于动态页面渲染。
  • ijson 用于大 JSON 流式解析。
  • SQLite 用于本地数据存储。
  • openpyxl 用于 Excel 导出。
  • PyInstaller 和 Inno Setup 用于生成 Windows 安装包。
  • GitHub Actions 自动执行测试、构建和 Release 发布。

四、安装方式

Windows 用户可以直接从 Release 下载:

InfoScraper-Setup.exe

安装包不要求用户预先安装 Python。

同时 Release 中提供:

InfoScraper.exe
InfoScraper-Setup.zip
SHA256SUMS.txt

其中:

  • InfoScraper-Setup.exe 是向导式安装包。
  • InfoScraper.exe 是单文件程序。
  • InfoScraper-Setup.zip 是压缩包版本。
  • SHA256SUMS.txt 用于校验文件完整性。

五、测试情况

当前项目已建立多类测试:

  • JSONPath 测试
  • API 分页测试
  • checkpoint 测试
  • 数据库迁移测试
  • 代理池测试
  • 子域名测试
  • 导出测试
  • 脱敏测试
  • robots.txt 测试
  • 调度任务恢复测试
  • 流式处理测试
  • 真实本地 HTTP 集成测试
  • 压力测试

当前本地测试结果:

75 passed

测试重点覆盖了以下问题:

  • 字段不齐时 CSV 是否崩溃
  • Excel 是否保留数字类型
  • 公式注入是否被阻止
  • 代理加密后能否继续启用和禁用
  • 定时任务恢复后是否能重复执行
  • robots 返回 429 是否会被错误放行
  • 增量字段为空时是否误删重复数据
  • checkpoint 写入失败是否会导致采集中断

六、项目目前的边界

SL-crawler 已经可以用于常见网页和 API 数据采集,但仍然存在一些需要在真实环境中验证的边界:

  • 不同网站的验证码无法通用自动处理。
  • 自动登录需要针对具体网站编写流程。
  • 免费代理的稳定性和安全性无法由程序保证。
  • 不同 Windows 版本和安全软件环境仍需要实际测试。
  • 超大规模长期运行仍应根据机器配置进行压力评估。
  • 请遵守目标网站的服务条款、robots.txt 和适用法律法规。
  • 这个工具适合用于:

    • 内部数据整理
    • 公开信息采集
    • API 数据同步
    • 站点内容归档
    • 测试环境数据抓取
    • 个人自动化任务

    不适合用于绕过登录、破解验证码、窃取隐私数据或进行未授权访问。

    七、后续规划

    后续计划包括:

    • 进一步拆分 GUI 模块。
    • 增加更多真实网站集成测试。
    • 增加更完整的代理评分和长期统计。
    • 提供更多 API 模板。
    • 增加更丰富的任务监控界面。
    • 完善跨平台支持。
    • 增加更详细的运行诊断日志。
    • 优化超大规模数据处理性能。

    总结

    SL-crawler 的目标不是做一个“只能运行某个脚本”的爬虫,而是提供一个可配置、可恢复、可审计、可分发的通用数据采集工具。

    它把网页/API 采集、字段解析、数据清洗、增量过滤、代理管理、数据库存储、定时调度和 Windows 安装包整合到了一起。

    目前项目已经具备较完整的工程化基础,适合用于公开信息采集和个人自动化任务。对于真实生产环境,仍建议根据目标网站规则进行充分测试,并严格遵守授权和合规要求。

    欢迎在 GitHub 提交 Issue 或 Pull Request:

    GitHub – tomjoy248-crypto/InfoScraper · GitHub

    赞(0)
    未经允许不得转载:171主机测评 » SL-crawler:一个可视化配置的通用网页与 API 数据采集工具
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址