1、立项背景和目标:单机爬虫在面对大规模数据采集时存在效率瓶颈和IP被封风险。本项目目标是构建一个支持多机协作的分布式爬虫系统,集成代理IP池实现自动IP轮换,解决反爬限制下的批量数据采集问题。
2、核心功能模块:①代理池模块从多个免费代理网站爬取IP,通过20线程并发验证可用性,基于分数机制自动淘汰劣质代理(初始100分,成功+1,失败-10,归零删除);②分布式爬虫基于Scrapy-Redis实现多进程共享URL队列,支持断点续爬和自动去重,共采集999条图书数据;③代理中间件每个请求自动从代理池API获取代理IP,使用后反馈结果调整分数;④监控面板实时展示代理池状态、爬取数据统计和评分分布图表。
3、业务流程:代理池爬取IP→多线程验证→Redis存储打分→爬虫从Redis队列取URL→代理中间件自动加IP→请求目标网站→数据存入MongoDB→Streamlit面板实时监控。代理池API提供6个HTTP接口供爬虫调用,去重1049个URL,队列剩余0个。
1、整体架构分为代理池系统、分布式爬虫、监控面板三大模块。代理池用requests爬取+ThreadPoolExecutor多线程验证+Redis有序集合存储;分布式爬虫用Scrapy-Redis替换默认调度器,URL队列和去重集合都存Redis,支持多机器共享;数据存储用MongoDB的upsert操作实现幂等写入;监控面板用Streamlit+Plotly渲染。
2、我负责全部模块开发。代理池实现3个数据源爬取+20线程并发验证+分数淘汰机制+FastAPI提供6个接口;分布式爬虫实现RedisSpider+代理中间件+随机UA中间件+MongoDB Pipeline;监控面板实现代理质量饼图+Redis队列状态+爬取数据表格+评分分布图。配置了setup.bat一键创建虚拟环境,start.bat一键选择启动爬虫、代理池或面板。
3、遇到的难点:①免费代理可用率极低,通过多线程并发验证和分数淘汰机制自动过滤;②多进程共享URL去重问题,用Redis集合做全局去重解决;③代理池与爬虫的解耦,通过FastAPI提供HTTP接口,爬虫不直接连Redis;④镜像源找不到scrapy-redis包,通过清华源加trusted-host参数解决;⑤pandas 3.x与streamlit版本冲突,通过锁定pandas 2.2.2和numpy 1.26.4解决。