#分布式爬虫# #scrapy-redis#
基于redis实现分布式爬虫,又名scrapy-redis,redis是一个基于内存的数据库
1.概念与作用
1.1概念:多个子业务,部署在不同的服务器上;是一种将任务分布在不同地方的工作方式。(把工作分配给多台电脑同时执行)
1.2作用:提高安全性和效率
(1)默认情况下,我们使用scrapy框架进行爬虫时使用的是单机爬虫,就是说它只能在一台电脑上运行,因为爬虫调度器当中的队列queue去重和set集合都只能在本机上创建的,其他电 脑无法访问另外一台电脑上的内存和内容。
(2)分布式爬虫实现了多台电脑使用一个共同的爬虫程序,它可以同时将爬虫任务部署到多台电脑上运行,这样可以提高爬虫速度,实现分布式爬虫。
2.redis安装
2.1下载地址: https://github.com/MicrosoftArchive/redis/releases
2.2修改redis配置文件:redis.windows.conf
允许其他电脑连接自己的redis
(1)注释 bind 127.0.0.1 允许同一个局域网内的远程访问
(2)关闭保护模式:将protected-mode yes 修改为:protected-mode no
3.实操笔记
3.1常规scrapy抓取信息,存放进item
3.2scrapy改写分布式
注:需安装模块pip install scrapy-redis
3.2.1开启redis服务
(1)提前cd到redis的安装路径
(2)启动服务:redis-server.exe redis.windows.conf
(3)启动数据库: redis-cli.exe,出现下面的图
(4)打开一个新的命令窗口cd到redis的安装路径
(5)启动redis:redis-cli
3.2.2改写代码
(1)settings.py中,把下面代码复制进去
(实现把redis变成我们的调度器、去重、管道存储、连接redis)
# 1.启用调度将请求存储进redis
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 2.确保所有spider通过redis共享相同的重复过滤。
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 2.公共存储区域
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline':300,
'my_spider.pipelines.MySpiderPipeline': 301,
}
# 3.指定连接到Redis时要使用的主机和端口。
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
(2)spider.py中
# 导出RedisSpider
from scrapy_redis.spiders import RedisSpider
# 类继承 RedisSpider (原来是继承scrapy.Spider)
class BookDataSpider(RedisSpider):
pass
# 注销strat_urls 设置 redis_key = "db:start_urls" 开启爬虫钥匙
# start_urls = ['全部商品分类页']
redis_key = "book"
3.2.3把日志等级LOG_LEVEL注释掉(好像也可以保留)
3.2.4爬虫实现
(1)同时打开多个命令窗口(模拟多台电脑,伪分布式),都输入执行爬虫命令,会进入一个等待中心调度的状态
(2)启动所有爬虫
单独一个命令窗口,启动redis-shell cd到根目录,输入redis-cli.ex
输入lpush key url
key: spider设置的redis_key
url : spider里面的start_urls