Scrapy_Redis 分布式处理

 

1、Scrapy_redis 模块安装

2、Scrapy配置

3、redis安装及配置

4、这才是重点

5、源码:


redis 是一个非关系型的数据库,支持分布式处理

  • Redis 是目前公认的速度最快的基于内存的键值对数据库
  • Redis 作为临时数据的缓存区,可以充分利用内存的高速读写能力大大提高爬虫爬取效率。
  • scrapy-redis 是为了更方便地实现 Scrapy 分布式爬取,而提供的一些以 Redis 为基础的组件。
  • scrapy-redis 把 deque 换成 redis 数据库,能让多个 spider 读取同一个 redis 数据库里,解决了分布式的主要问题。

接下来,主要记录如何直接实现Scrapy_redis分布式的处理:

1、Scrapy_redis 模块安装

pip install scrapy_redis

2、Scrapy配置

spider文件中,爬虫类

 settings.py文件中的新增设置:(赋值进去即可)

# 添加配置
# 过滤器  去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 调度状态持久化   也可以不用设置
SCHEDULER_PERSIST = True
# 请求调度使用优先队列   也可以不用设置
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
# redis 使用的端口和地址  
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
# 或者使用 REDIS_URL = 'redis://127.0.0.1:6379'

#  这个要留意一点,姜redispipeline放到item_pipelines中,如果你已经写过了,直接将该pipe放进
#item_pipeline中即可,千万别分开写,导致后边出现的覆盖
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 100,
}

 当然,其他分布式机器有点不一样了,

        只有这一个不一样:修改REDIS_HOST = '服务器主机的ip地址(可以通过cmd命令下ipconfig查看)',其余都一样

3、redis安装及配置

(1)下载redis压缩包

文档:Redis-x64-3.2.100.zip
链接:http://note.youdao.com/noteshare?id=49b64d39412e68ef43d3db4727b1e04c&sub=85B94D1B540446DF93E5B1C70426AB48

(2)解压Redis-x64-3.2.100.zip到指定文件夹

(3)配置path路径

将解压后的文件路径添加到系统环境变量的path路径下

(4)win+R ---> cmd启动命令行

输入redis-server,出现如下图,说明配置成功

 (5)另外一台电脑同样操作,安装redis

(6)作为服务器端的电脑,需要将redis.windows-service.conf配置文件中修改如下:(允许远程访问的操作)

 打开此配置文件:修改如下:

1)打开配置文件把下面对应的注释掉
# bind 127.0.0.1 

2)Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no
daemonize no

3)保护模式
protected-mode no 

(7)如此,启动该服务器机上的redis-server服务

cmd命令下,输入启动服务器命令:(redis-server   配置文件绝对路径)

redis-server E:\redis\redis.windows-service.conf

可能按下enter键以后,没有出现任何的提示,没事,没报错就说明服务启动了,一点儿都不要慌

(8)服务器端,分布式机器 启动爬虫

输入启动爬虫之后,爬虫默认等待redis数据库中的 dangdang键key对应的value值,只要redis数据库中有了key:dangdang  对应的值value,该爬虫就开始进行

redis_key = 'dangdang'   

(9)鉴于我不怎么会redis命令,也不想学,就安装一个相当于小海豚(mysql)一样的图形化界面,进行数据操作

A、下载:redis-desktop-manager-0.8.8.384.exe

     链接:https://pan.baidu.com/s/1-3e86v5nBgnEmrxni63iJQ 
     提取码:kun4 
      复制这段内容后打开百度网盘手机App,操作更方便哦

B、安装: 随便安装,next一路通畅

C、点击执行redis可视化工具

D、连接redis服务(当然之前一定要先启动本地的redis服务,才可以连接上)

看图操作:
 

E、双击左上角root,如果报错,看看有没有启动服务

F、添加键值

save保存之后,立马关注爬虫terminal中,服务器端和分布式机器即将开启分布式 爬虫,其他的就不用管了。

(10)通过使用scrapy_redis分布式的这么一个架构,我们也可以断点续传,即使你关闭了服务器,下次启动的时候,可以在原来的基础上继续进行分布式爬虫

执行一段时间后,我们发现有三个数据表:

dangdang:dupefilter   去重数据表

dangdang:items   这是保存的item的数据表

dangdang:requests   这是保存的当前还没有被 请求的Request对象,如果被请求,就会被执行.pop操作

4、这才是重点

参考资料:

(1(scrapy_redis底层代码剖析原理)https://cuiqingcai.com/6058.html

(2  (redis 数据库知识)https://www.cnblogs.com/jinxiao-pu/p/6838011.html

5、源码:

xx书籍爬虫:https://github.com/steamfeifei/Scrapy_redis_spiderBook

发布了84 篇原创文章 · 获赞 149 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/feifeiyechuan/article/details/90166405
今日推荐