Python工程师之Scrapy持久化运行

前言

要了解scrapy-redis,我们首先得知道什么是scrapy
scrapy 是爬虫框架,他是为了爬取结构性数据而编写的应用框架。 具体可以使用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中,这就是一个不择不扣的网络爬虫。
那么什么是网络爬虫呢?
所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,抓取特定网站网页的数据。
Scrapy 底层是使用 Twisted这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。

正文

那么了解了scrapy,我们也来说一说scrapy-redis,这个就是持久化运行scrapy的一个技术方案。

scrapy-redis是为了更方便地实现scrapy分布式爬取,而提供了一些以redis为基础的组件。从这里你也听出来了,这不是一个新框架,就是把scrapy这个爬虫工厂改造升级了哈。你可以这么认为,scrapy是一工厂,能够出产你要的spider。而scrapy-redis是其他厂商为了帮助scrapy工厂更好的实现某些功能而制造了一些设备,用于替换scrapy工厂的原设备。而替换的设备,就是仪器进原料进行加工的口子和处理材料的模块。
那么scrapy-redis提供了一些什么呢?

分别是 Scheduler、Dupefilter、Pipeline、Spider 几个组件

我来讲一讲 Scheduler

在爬虫爬取过程当中,有一个主要的数据结构是“待爬队列”,以及能够操作这个队列的调度器,这个调度器也就是Scheduler。我翻阅了官方文档 ,也没看见很好的说明文档,只说了是python自带的collection.deque。那么scrapy的Scheduler就是改造collection.deque他的啦。
那么这个和scrapy-redis 有什么关系呢? 因为它改造了这个啊,scrapy-redis提供了一个解决方法,让待爬对列的读取从redis中获取,把deque换成redis数据库,我们从同一个redis服务器存放要爬取的request,这样就能让多个spider去同一个数据库里读取,这样分布式的主要问题就解决了.

那我也来讲讲调度器“Scheduler”是怎么工作的:

它负责对新的request进行入列操作(加入deque),取出下一个要爬取的request(从deque中取出)等操作。在scrapy中,Scheduler并不是直接就把deque拿来就粗暴的使用了,而且提供了一个比较高级的组织方法,它把待爬队列按照优先级建立了一个字典结构,比如:
{
priorityA: 队列A
priorityB:队列B
priorityC:队列C
}
然后根据request中的priority属性,来决定该入哪个队列。而出列时,则按priority较小的优先出列。为了管理这个比较高级的队列字典,Scheduler需要提供一系列的方法。说这么多有什么意义呢?最主要的指导意义就是:你要是换了redis做队列,这个scrapy下的Scheduler就用不了,所以自己写一个吧。于是就出现了scrapy-redis的专用Scheduler

scrapy中是如何实现这个去重功能的呢?那就是Dupefilter

用集合~scrapy中把已经发送的request指纹放入到一个集合中,把下一个request的指纹拿到集合中比对,如果该指纹存在于集合中,说明这个request发送过了,如果没有则继续操作。这个核心的判重功能是这样实现的:

def request_seen(self, request):
    # request_fingerprint 指纹集合
    fp = self.request_fingerprint(request)
    # 判重
    if fp in self.fingerprints:
        return True
    self.fingerprints.add(fp)
    ......

详细源码:Dupefilter源码链接
就这样啪啪啪的为了适应redis ,就把dupefilters改造出来了、那么剩下的Pipeline、Spider也是同理,为了适应redis

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值