# hfbot_v1 **Repository Path**: wangshuchn/hfbot_v1 ## Basic Information - **Project Name**: hfbot_v1 - **Description**: Scrapy-Redis 分布式爬虫 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-04-14 - **Last Updated**: 2021-08-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Sectotal-spider ============== #### 开发环境: `ubuntu18.04`|`Python3.6` |`Scrapy2.0.1` |`Mysql8.0.18 `| `Redis3.2.12 `| `scrapy-redis 0.6.8`| #### sectotal-spider-v1.0 ![SECTOTAL](https://10.102.1.53/wangshu/hfbot_v1/tree/master/Framework/OS/分布式架构设计.png) #### 系统总体架构 - 1. 采用分布式主从结构,设置1个Master服务器和多个Slave服务器 - 2. Master管理Redis数据库和分发下载任务,Slave部署Scrapy抓取网页和解析提取项目数据 - 3. 服务器环境是centos7操作系统,Master服务器安装Redis数据库和Graphite(第三方监控工具) - 4. Slave安装Scrapy和Redis客户端。初期系统功能划分: - (1) 数据抓取模块 <数据抓取模块包含浏览器调用,网页下载,正文内容提取,图片提取,防反爬,数据存储> - (2) 数据处理模块 <数据处理模块包含数据清洗,提取正文的编码转换> #### 动态网页抓取 - 1. 调用有界面浏览器,(selenium) - 2. 使用无界面浏览器,(casperjs, phantomjs) - 3. 预留待解决次功能,目前需求对动态抓取不大 #### 分布式设计 - 1. 爬虫采用广度优先爬取策略, 根据用户需求,可限制爬取页面数量 - 2. Scrapy从Redis中获取urls,Redis中存储了Scrapy工程的request信息 根据这些信息可以掌握任务情况和爬虫状态,分配任务时便于使用均衡负载,克服爬虫的性能瓶颈 - 3. 遗留问题 - (1) 当大批量数据导致Redis存储或者访问速度遇到问题时,可以通过增大Redis集群树和爬虫集群数量改善 - (2) Scrapy-Redis分布式方案解决了中断续抓和数据去重的问题,爬虫重新启动后,会按照Redis队列中url抓取,已经抓取的url将自动过滤 #### Graphite监测组件 - 1. 这是基于Django开发的一个Web应用,用来监测 CPU、内存、I/O利用率、网络吞吐量和延迟 - 2. 这里之所以用到Graphite,是为了实时监测。暂且先用着,在没有找到比较好的方案 - 3. Graphite初期使用: - (1) 监测 系统下载信息,日志信息,调度信息,爬虫运行信息,爬虫异常信息,文件数量 - (2) 获得item数量,最大请求深度和爬取页面总数量。 #### 项目总结 以上是Sectotal-scrapy_v1.0爬虫系统部分设计,之前是一直单机开多进程爬取 因爬取量和爬取速度的局限性,采用Scrapy-Redis分布式 #### TODO: - [x] 结合Scrapy-Redis抓取(多台slave部署未测试) - [ ] 动态页面抓取 - [x] 代理和UserAgent过滤 - [ ] 图片下载延迟