APP下载

Python程序员面试必备——分散式爬虫scrapy+redis解析

消息来源:baojiabao.com 作者: 发布时间:2024-05-20

报价宝综合消息Python程序员面试必备——分散式爬虫scrapy+redis解析

最近有许多小伙伴向我私信,说最近准备跳槽,但是面试的机会比较少,好不容易得到面试机会,由于技术点的匮乏,面试直接被刷掉。根据反馈,很多面试都问到了分散式爬虫,今天小谷就给大家讲讲~

说到爬虫首先要说的就是scrapy,scrapy是Python界出名的一个爬虫框架。scrapy是一个为了爬取网站资料,提取结构性资料而编写的应用框架。

scrapy能做的事情很多,有人改变了scrapy的伫列排程,将起始的网址从start_urls里分离出来,改为从redis读取,多个客户端可以同时读取同一个redis,从而实现了分散式的爬虫。

scrapy+redis架构:

scrapy-redis在scrapy的架构上增加了redis,基于redis的特性拓展了如下四种元件:Scheduler,Duplication Filter,Item Pipeline,Base Spider。

1. Scheduler(排程):

scrapy改造了python本来的collection.deque(双向伫列)形成了自己scrapy queue,而scrapy-redis 的解决是把这个scrapy queue换成redis数据库,从同一个redis-server存放要爬取的request,便能让多个spider去同一个数据库里读取。

2. Duplication Filter(去重):

scrapy-redis中由Duplication Filter元件来实现去重,它通过redis的set不重复的特性,巧妙的实现了DuplicationFilter去重。

3. Item Pipline(管道):

引擎将(Spider返回的)爬取到的Item给Item Pipeline,scrapy-redis 的Item Pipeline将爬取到的 Item 存⼊redis的 items queue。修改过Item Pipeline可以很方便的根据 key 从 items queue 提取item,从而实现 items processes丛集。

4. Base Spider(爬虫):

不再使用scrapy原有的Spider类,重写的RedisSpider继承了Spider和RedisMixin这两个类,RedisMixin是用来从redis读取url的类。

scrapy+redis工作机制:

1. 首先Slaver端从Master端拿任务(Request、url)进行资料抓取,Slaver抓取资料的同时,产生新任务的Request便提交给 Master 处理;

2. Master端只有一个Redis数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬伫列,并且储存爬取的资料。

2019-12-29 12:50:00

相关文章