scrapy-redis分布式组件,scrapy-redis
启动redis
查看redis进程
ps aux|grep redis
关闭redis进程
sudo service redis stop
启动redis进程
sudo service redis start
查看redis进程
ps aux|grep redis
Redis的安装配置window
1. 列表内容修改配置文件redis.conf(版本不同,名字会有出入)
2. 将bind 127.0.0.1这个参数注掉
3. 命令行(管理员权限)中执行
4. redis-server <配置文件路径>
Redis的安装配置mac ##
1. 找到配置文件并进行修改
2. 注销bind 127.0.0.1配置,表明允许远程连接
3. 启动redis服务器
4. sudo redis-server <配置文件路径>
redis安装与配置linux
启动redis
sudo redis-server
Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 没有配置文件,使用的是默认的配置文件
退出执行
Ctrl + C
cd /etc/redis
ls
/etc/redis ls出现下
redis.conf redis-server.post-down.d redis-server.post-up.d redis-server.pre-down.d redis-server.pre-up.d
sudo vim redis.conf
修改
68 # bind 192.168.1.100 10.0.0.1
69 #bind 127.0.0.1 注释掉bind 127.0.0.1配置,表明允许远程连接
修改配置文件
sudo vim redis.conf
42 daemonize yes yes将no改为yes
远程数据服务,设置redis数据库以守护进程启动,window不能设置
启动redis服务器
sudo redis-server /etc/redis/redis.conf
连接测试
1.master端 redis-cli
2.非master端 redis-cli -h master_ip
安装scrapy-redis组件
pip3 install scrapy_redis
scrapy-redis分布式组件
分布式
分布式爬虫问题其实也就是多台机器多个 spider 对 多个 url 的同时处理问题,怎样 schedule 这些 url,怎样汇总 spider 抓取的数据。
就是把 url 存在某个地方,共享给所有的机器,总的调度器来分配请求,判断 spider 有没有闲置,闲置了就继续给它任务,直到所有的 url 都爬完,这种方法解决了去重问题,也能提高性能,scrapy-redis 就实现了这样一个完整框架
优点:
提升了项目的整体速度
单个节点不稳定不会影响整个任务执行
为什么要使用该组件
Scrapy多个spider不能共享待爬取队列,自身并不支持分布式爬虫
scrapy-redis组件的逻辑:
该组件粘合了redis数据库和scrapy框架,完美的解决了scrapy框架无法进行分布式数据采集的缺点
scrapy与scrapy-redis 区别
克隆案例到本地
git clone https://github.com/rolando/scrapy-redis.git
案例dmoz爬虫
特性:
1.数据,请求队列,去重都在redis数据库中进行
2.爬虫中断会从停止处继续执行
案例myspider_redis爬虫
特性:
1.使用redis_key代替了起始url列表
2.允许的域名可以通过__init__方法自动获取
3.使用scrapy runspider 爬虫文件名的形式启动
4.启动之后自动等待任务下发
5.任务完成之后再次进入等待状态
项目开发
1.创建项目,使用命令创建爬虫项目
2.明确目标,分析目标站点,明确需要采集的数据,并且建立模型
修改爬虫为分布式
1.修改爬虫文件
1)导入分布式爬虫类
2)修改爬虫的继承
3)注销allowed_domains和start_urls
4)重写__init__()方法(可选)
5)添加redis_key
2.修改配置文件
使用官方案例的配置文件进行修改
配置redis数据库地址
分布式爬虫:先完成普通爬虫,在修改为分布式爬虫