立项背景和目标:市场调研、电商比价、行业数据收集等场景经常需要从网页提取结构化数据,人工复制粘贴效率低、易出错、无法复用。本项目目标是开发一款通用网页数据采集工具,一条命令完成"抓取→清洗→导出"全流程,让非技术人员也能轻松采集数据。
核心功能模块:① 智能抓取引擎——通过 CSS 选择器或表格定位自动抓取列表页与详情页数据;② 多页抓取——支持下一页按钮翻页、页码参数翻页、无限滚动三种模式,自动识别并防死循环;③ 数据清洗管道——自动去空白、字段映射、类型转换(支持金额千分位、日期等)、跨页去重;④ 断点续抓——SQLite 缓存已抓页面,失败任务自动进入重试队列,中断后可继续;⑤ 多格式导出——Excel(多 Sheet、自动列宽、表头样式、冻结首行)、CSV(UTF-8 兼容 Excel)、JSON。
业务流程:输入 URL 与选择器配置 → 逐页抓取(限速+重试)→ 数据清洗转换 → 去重 → 导出文件 → 生成抓取报告(成功/失败/耗时统计)。
整体架构:模块化分层设计:engine.py 串联全流程编排;http_client.py 负责网络请求(代理、限速、指数退避重试、编码兜底);pagination.py 处理三种翻页策略;cleaning.py 实现清洗管道;exporters.py 处理三种格式导出;cache.py 实现 SQLite 断点缓存;report.py 生成统计报告。CLI 完全兼容 v1 用法,新增 JSON 配置文件模式。
我的负责模块与结果:独立完成全部 7 个模块的设计与实现,交付 61 个新增自动化测试(含原 13 个回归测试共 74 个全部通过),并用真实网站验证翻页抓取+字段转换+去重全流程。代码约 1000 行,全部 UTF-8 编码。
难点与解决:① 无限滚动页面没有"下一页"按钮——实现滚动触发 + 内容变化检测停止策略;② 中文金额"¥1,234.5"转数值——自定义清洗规则兼容千分位与货币符号;③ 中断后重复抓取——通过 URL 缓存与失败队列实现断点续抓,重跑不重复入库。