Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

  • A+
所属分类:python网络爬虫

下面是一个超级计算机的排行榜,如果我们能拥有其中任意一个,那么我们就不需要搞什么分布式系统。可是我们买不起,即使买得起,也交不起电费,所以我们只好费脑子搞分布式。

Rank

System

Cores

Rmax

Rpeak

Power (kW)

1

Tianhe-2 China

3,120,000

33,862.7

54,902.4

17,808

2

Titan US

560,640

17,590.0

27,112.5

8,209

3

Sequoia US

1,572,864

17,173.2

20,132.7

7,890

4

K Japan

705,024

10,510.0

11,280.4

12,660

5

Mira US

786,432

8,586.6

10,066.3

3,945

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

架构概述

与第二期介绍的通用爬虫架构不同,下面是一个聚焦爬虫的架构图,与前者相比,它不仅要保存网页,还要提取出网页中的指定内容。

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

流程控制 – 任务

Scheduler_manager定时读取Mysql中的任务信息,根据任务的周期等配置进行调度,下面是一个最基本的任务启停流程。

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

流程控制 – 数据

现在每个Crawler_core实例都有了待处理的任务,接下来就要对每个任务的url进行处理了。继续使用Redis作为公共缓存来存放URLs,多个Crawler_core实例并行存取todo集合。

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

流程控制 – 状态

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

taskId:flag:crawler:info

Filed

value

说明

totalCnt

10000

抓取的url总数:抓取完成,不管成功失败,都加1

failCnt

0

抓取的url失败数:抓取失败,加1

switch

1

任务状态:0:停止,1:启动,2:暂停,3:暂停启动

priority

1

任务优先级

retryCnt

0

重试次数

status

0

任务执行状态:1:进行中,2:完成

Ref

0

url引用数:每消费一个url,减1;生成一个url,加1。等于0则任务完成

maxThreadCnt

100

任务的最大线程数

remainThreadCnt

10

剩余可用线程数

lastFetchTime

1496404451532

上一次抓取时间

taskId:flag:parser:info

Filed

value

说明

totalCnt

10000

解析总数:解析完成,不管成功失败,都加1

failCnt

0

解析失败数:解析失败,加1

crawlerStatus

0

爬取状态:0:进行中,2:完成

ref

10

url引用数:crawler每保存一个网页,加1;parser每解析完成一个网页,减1。等于0不说明任务完成。若crawlerStatus等于2,ref等于0,则任务完成。

taskId:flag:filter:info

Filed

value

说明

totalCnt

10000

清洗总数:清洗完成,不管成功失败,都加1

failCnt

0

清洗失败数:清洗失败,加1

crawlerStatus

0

解析状态:0:进行中,2:完成

ref

10

url引用数:parser每保存一条数据,加1;filter每清洗完成一条数据,减1。等于0不说明任务完成。若parserStatus等于2,ref等于0,则任务完成。

流程控制 – failover

如果一个Crawler_core的机器挂掉了,就会开始数据恢复程序,把这台机器所有未完成的任务恢复到公共缓存中。

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

Python分布式爬虫!一篇文章带你爬变所有网站的小姐姐!

学会了吗!这波是爬虫中的必备技能哦!

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: