在实际开发中,网页数据采集经常会遇到一些重复工作:
- 需要反复编写 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 数据采集,但仍然存在一些需要在真实环境中验证的边界:
这个工具适合用于:
- 内部数据整理
- 公开信息采集
- API 数据同步
- 站点内容归档
- 测试环境数据抓取
- 个人自动化任务
不适合用于绕过登录、破解验证码、窃取隐私数据或进行未授权访问。
七、后续规划
后续计划包括:
- 进一步拆分 GUI 模块。
- 增加更多真实网站集成测试。
- 增加更完整的代理评分和长期统计。
- 提供更多 API 模板。
- 增加更丰富的任务监控界面。
- 完善跨平台支持。
- 增加更详细的运行诊断日志。
- 优化超大规模数据处理性能。
总结
SL-crawler 的目标不是做一个“只能运行某个脚本”的爬虫,而是提供一个可配置、可恢复、可审计、可分发的通用数据采集工具。
它把网页/API 采集、字段解析、数据清洗、增量过滤、代理管理、数据库存储、定时调度和 Windows 安装包整合到了一起。
目前项目已经具备较完整的工程化基础,适合用于公开信息采集和个人自动化任务。对于真实生产环境,仍建议根据目标网站规则进行充分测试,并严格遵守授权和合规要求。
欢迎在 GitHub 提交 Issue 或 Pull Request:
GitHub – tomjoy248-crypto/InfoScraper · GitHub




