首先更大家说下  正式部署上线的爬虫会有分布式爬虫的需求  而且原本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   通过插入返回值 判断已抓取url

scrapy_redis/defaults.py

默认配置文件

scrapy_redis/queue.py

队列文件  默认PriorityQueue  用到 redis 有序集合 self.server.execute_command('ZADD', self.key, score, data)  留意 100行 score = -request.priority

redis 有序集合是越小 排序越优先 加了-  等于说是反过来   还用到redis的事务  112行 pipe = self.server.pipeline()

先入后出队列是通过  lpush  lpop  实现

先进先出 lpush rpop 实现

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  如果有多条进程 读取  队列 必须用到阻塞保证一致性

有不懂大家尽管问

最新文章

  1. ViewController生命周期
  2. 最大流模版 pascal
  3. Enterprise Library 6
  4. x01.BitmapHelper:图像处理
  5. DSP using Matlab 示例Example2.2
  6. log4j配置不同的类多个日志文件
  7. Maven提高篇系列之(一)——多模块 vs 继承
  8. Android动画解析--XML
  9. Contest2037 - CSU Monthly 2013 Oct (problem F :ZZY and his little friends)
  10. python __enter__ 与 __exit__的作用,以及与 with 语句的关系
  11. Zend Server的WebAPI焦点:异步操作
  12. Bootstrap兼容IE8
  13. Python初学——多进程Multiprocessing
  14. C++ 知识点总结复习
  15. Java集合及concurrent并发包总结(转)
  16. PHP爬虫框架Beanbun使用
  17. java-HTML&javaSkcript&CSS&jQuery&ajax( 八)
  18. Echo()、print()、print_r()区别
  19. 【新知识】队列&bfs【洛谷p1996约瑟夫问题&洛谷p1451求细胞数量】
  20. mongoose修改数组中某个特定的值

热门文章

  1. 客官,来看看AspNetCore的身份验证吧
  2. pandas | 使用pandas进行数据处理——Series篇
  3. 阿里云centos7安装redis全过程记录
  4. SpringCloud项目配置加载顺序
  5. C++中vector和堆的常用使用方法&例题:数据流中的中位数
  6. 初用MySQL Mysql示例库 Navicat15
  7. 函数默认参数的TDZ
  8. mongodb(二):数据库安装,部署(linux)
  9. 数据可视化之powerBI入门(四)Power BI与PowerQuery、PowerPivot有什么关系
  10. Cordova总是弹出Connection to server was Unsuccessful