ken桑带你读源码 之 scrapy_redis

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ken桑带你读源码 之 scrapy_redis相关的知识,希望对你有一定的参考价值。

首先更大家说下  正式部署上线的爬虫会有分布式爬虫的需求  而且原本scrapy 的seen (判断重复url的池  不知道用啥词  已抓url吧 )  保存在磁盘 

url 队列 也是保存在磁盘 (保存在磁盘 对爬虫效率会极大影响)   如果是断点重爬 声明 jobdir 百分百是保存在磁盘   不申明jobdir 的话保存在内存 但会有单点内存的上限问题   所以说那么多 总之  scrapy_redis  是爬虫工程师必须了解的 

scrapy_redis/dupefilter.py

 判断已抓取url  主要是声明 dupefilter_key  作为 redis key  判断是否已抓取  第 100行  added = self.server.sadd(self.key, fp)  return added == 0   用到redis  集合set  

scrapy_redis/defaults.py

 默认配置文件  

scrapy_redis/queue.py

 队列文件  默认PriorityQueue  用到 redis 有序队列 self.server.execute_command(‘ZADD‘, self.key, score, data)  留意 100行 score = -request.priority  redis 有序集合是越小 排序越优先 加了-  等于说是反过来 

pop 用到redis的事务  112行 pipe = self.server.pipeline()  

scrapy_redis/pipelines.py

63 行   把  item  push 到redis    61行   return deferToThread(self._process_item, item, spider)   返回非阻塞 异步函数

scrapy_redis/scheduler.py 

 

引擎文件  主要是处理队列的  push pop      154行 判断去重   164  加入超时 用作 阻塞 pop  如果有多条进程 读取  队列 必须用到阻塞保证一致性  

 

以上是关于ken桑带你读源码 之 scrapy_redis的主要内容,如果未能解决你的问题,请参考以下文章

ken桑带你读源码 之scrapy scrapycorescheduler.py

一文带你读懂JDK源码:Lambda表达式

分分钟带你读懂 ButterKnife 的源码

从源码入手,一文带你读懂Spring AOP面向切面编程

从源码入手,一文带你读懂Spring AOP面向切面编程

分布式存储引擎大厂实战——带你读源码搞懂为什么Redis用单线程还这么快