首 页 行业资讯 新车 试驾评测 养车用车 车型库

python分布式爬虫是什么意思

发布网友 发布时间:2022-03-03 13:03

我来回答

2个回答

热心网友 时间:2022-03-03 14:32

一、分布式爬虫架构

在了解分布式爬虫架构之前,首先回顾一下Scrapy的架构,如下图所示。


Scrapy单机爬虫中有一个本地爬取队列Queue,这个队列是利用deque模块实现的。如果新的Request生成就会放到队列里面,随后Request被Scheler调度。之后,Request交给Downloader执行爬取,简单的调度架构如下图所示。

如果两个Scheler同时从队列里面取Request,每个Scheler都有其对应的Downloader,那么在带宽足够、正常爬取且不考虑队列存取压力的情况下,爬取效率会有什么变化?没错,爬取效率会翻倍。

这样,Scheler可以扩展多个,Downloader也可以扩展多个。而爬取队列Queue必须始终为一个,也就是所谓的共享爬取队列。这样才能保证Scheer从队列里调度某个Request之后,其他Scheler不会重复调度此Request,就可以做到多个Schler同步爬取。这就是分布式爬虫的基本雏形,简单调度架构如下图所示。

我们需要做的就是在多台主机上同时运行爬虫任务协同爬取,而协同爬取的前提就是共享爬取队列。这样各台主机就不需要各自维护爬取队列,而是从共享爬取队列存取Request。但是各台主机还是有各自的Scheler和Downloader,所以调度和下载功能分别完成。如果不考虑队列存取性能消耗,爬取效率还是会成倍提高。

二、维护爬取队列

那么这个队列用什么来维护?首先需要考虑的就是性能问题。我们自然想到的是基于内存存储的Redis,它支持多种数据结构,例如列表(List)、集合(Set)、有序集合(Sorted Set)等,存取的操作也非常简单。

Redis支持的这几种数据结构存储各有优点。

热心网友 时间:2022-03-03 15:50

就是一群电脑去对付一台电脑。
举个例子,你用主机 C 去爬网站S,S发现你爬数据太快,认为你不是人在操作,于是把你 IP 封了,你不是很郁闷么?于是,分布式爬虫上场了,我用C1,C2,C3,…………N 台电脑一起向S 发起爬数据,每台领取一份任务,降低爬的频率,但由于 N 台是并行去爬,所以效率相当惊人,把他们爬回的数据进行拼装就 OK 了。
分布式是个好东西。
又如,主力若想拉升股价,必须资金量很大,如果资金在一台电脑上集中拉升的话,交易所就记录了你的 IP,日后ZJH就容易查到你。那么主力当然会用分布式电脑来拉,把资金分散到 N 台电脑上,并且分散到 N 个帐户上,每个帐户上的资金低于ZJH查你的红线。然后用分布式程序集中控制这 N 台电脑 N 个帐号的资金联动。这样他们看到的就是 N 台电脑上的 N 个韭菜,很难判断他们是不是一起行动的,只有主力的程序才知道他们是一起行动的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com