爬虫代码重构
背景
- 开发时间短,造成功能代码没有有效的分割,造成代码无限扩充的厉害。
- 使用本地缓存,导致数据反复爬取之后的数据清洗非常麻烦。
- 没有定时的去执行爬取任务。
- xpath的读取没有抽取。
- redis和mongo缺失。
解决过程
- 使用redis构建爬取任务队列;队列为空,重新获取数据,回填到redis中。以此实现数据的增量更新。
- 使用mongodb存储数据,便于对数据解析错误时的清洗。
- 重构代码,将xpath和对应的爬虫配置分离。
- 重构代码,将核心功能的代码聚集,抽取成模块;使模块间的耦合降到最低。
App爬虫脚本的构建
- 定位要爬取的App,在繁杂的加密点中,聚焦核心的问题。主要是签名的问题。突破签名,不间断请求数据做压力测试等,查看App的风控点以及推理运维监控点。
- 爬取任务队列的构建,爬取数据的中间化数据保存。
- 对爬取的数据,提取想要的数据,形成结构化的数据。保存到数据库中。
- 对解析出错的字段,重新从mongo中捞出,清洗错误数据。
- log日志文件分析,形成数据分析结果,评估App开发过程中的缺点和优点等
- 对于App爬取过程中的假数据的处理等。
- 对于App 封杀device_id的情况,避免封杀device_id等情况出现等。
- App实时任务和离线任务的分开处理等。
如何保证数据的安全
最终我们会得到以下几大块:
1. 任务调度模块:负责爬取任务的生成和分配等
2. 脚本爬虫模块:各个App的爬虫脚本
3. 代理服务器模块:负责代理资源的分配等。
4. 数据存储模块:实现数据的存储和清洗以及合并到业务库中。
5. 日志模块:记录各个模块的运行情况,定位各个模块的崩溃问题。
6. 前端模块:负责爬取数据的展示和报表查看等。
7. 自动部署模块:将各个模块的合并,提交到服务器并运行等。
网友评论