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