崔庆才老师爬虫的学习笔记。

一、原理详解

1、Scrapy单机架构

Scrapy单机架构

2、 单主机爬虫架构

单主机爬虫架构

3、分布式爬虫架构

分布式爬虫架构1

分布式爬虫架构2

4、队列用什么维护?

Redis队列:

Redis,非关系型数据库,Key-Value形式存储,结构灵活。

是内存中的数据结构存储系统,处理速度快,性能好。

提供队列、集合等多种存储结构,⽅方便队列维护。

5、怎样来去重?

Redis集合:

Redis提供集合数据结构,在Redis集合中存储每个Request的指纹。

在向Request队列中加入Request前首先验证这个Request的指纹是否已经加入集合中。

如果已存在,则不添加Request到队列,如果不存在,则将Request添加入队列并将指纹加入集合。

6、怎样防⽌止中断?

启动判断:

在每台从机Scrapy启动时都会首先判断当前Redis Request队列是否为空。

如果不为空,则从队列中取得下一个Request执行爬取。

如果为空,则重新开始爬取,第一台从机执行爬取向队列中添加Request。

7、怎样实现该架构?

Scrapy-Redis:

Scrapy-Redis库实现了如上架构,改写了Scrapy的调度器,队列等组件。

利用它可以方便地实现Scrapy分布式架构。

github地址:https://github.com/rolando/scrapy-redis

安装pip install scrapy-redis

8、源码讲解

scrapy_resis/connection.py # 连接redis的基本的库

scrapy_resis/default.py # 一些默认的变量

scrapy_resis/dupefilter.py # 用来去重的一个机制

scrapy_resis/picklecompat.py # 和json的load和dump类似

scrapy_resis/pipelines.py # 管道,增加了集中存储到resids

scrapy_resis/queue.py # 队列

scrapy_resis/scheduler.py # 调度器

scrapy_resis/spiders.py # 定义了某些spider

scrapy_resis/unils.py # 一些工具库

持续更新…

× 多少都行~
打赏二维码