您的位置:首页 > 数据库 > Redis

linux分布式scrapy爬虫之安装scrapy-redis

2017-10-23 16:24 295 查看
安装完redis后,进入到redis目录下

输入redis-cli 会有提示安装 sudo apt-get install redis-tools

再输入:redis-server /etc/redis.conf 会有提示安装:sudo apt-get install redis-server

测试:

输入:hadoop@slave1:~/.local/lib/python2.7/site-packages/redis$ redis-cli

127.0.0.1:6379> 

修改配置文件::

hadoop@slave1:/etc/redis$ sudo vi redis.conf

#bind 127.0.0.1  改为 bind 0.0.0.0

远程访问:需要将 /etc/redis/redis.conf 的bind 127.0.0.1 改为 bind 0.0.0.0 

然后输入: ps -ef | grep redis 查看进程:

redis      1193      1  0 12:41 ?        00:00:00 /usr/bin/redis-server 0.0.0.0:6379   //这个地方是0.0.0.0:6379或者是 *:6379,表示其他ip可以访问

hadoop     1715   1700  0 12:46 pts/0    00:00:00 grep --color=auto redis

测试:hadoop@slave1:/etc/redis$ redis-cli -h 192.168.71.128 -p 6379

192.168.71.128:6379> 

报错:No matching distribution found for PIL 名字换了使用sudo pip install pillow

报错:No matching distribution found for mysqldb  安装MySQLdb模块,应该用MySQL-python,所以sudo pip install mysql-python

报错:mysql-python安装时EnvironmentError: mysql_config not found   只要原因是没有安装:libmysqlclient-dev 所以:sudo apt-get install libmysqlclient-dev

注意:如果要重新运行爬虫记得把master上的redis清空,因为master里的数据库“dmoz:dupefilter”是用来过滤重复的请求

192.168.71.128:6379> flushdb

使用命令:sudo vim /etc/redis/redis.conf 进行修改:

1、将保护模式设置为no:

如果不设置此处的话,windows下访问redis直接崩溃。

2、bind ip注释掉:

如果不注释掉,只有本地可以访问redis,windows是不能访问的。

接下来重启我们的redis服务,使用命令sudo service redis restart

启动分布式爬虫:

使用很简单 pip install scrapy-redis 安装

然后修改常规spider文件

1.引入RedisCrawlSpider和RedisSpider一样

from weibo.scrapy_redis.spiders import RedisSpider  ##这个scrapy_redis文件夹在weibo项目文件下,所以引入使用weibo.scrapy_redis.spiders

2.将spider类继承改为RedisSpider

class Weibo(RedisSpider):

3.将

start_urls = (

    'https://www.weibo.com',

)

替换为

redis_key = 'weibospider:start_urls'

4.然后在setting里面设置redis数据库的地址等

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

SCHEDULER_PERSIST = True

SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'

REDIS_URL = 'redis://192.168.71.129:6379'

REDIS_HOST = '127.0.0.1'

REDIS_PORT = 6379

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

5.然后启动爬虫,发现如下:

2017-10-20 17:09:03 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

2017-10-20 17:09:03 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023

2017-10-20 17:10:03 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

2017-10-20 17:11:03 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped
9d4c
0 items (at 0 items/min)

说明正在等待请求的urls,爬虫属于饥渴状态!!

此时已经在使用redis管理url队列,但是redis里面还没有start_urls

使用命令在master端输入:redis-cli

127.0.0.1:6379> lpush weibospider:start_urls https://weibo.cn/2810373291/fans
(integer) 1

127.0.0.1:6379> 

将start_urls push进redis

回头去看爬虫程序,如下:

2017-10-20 17:11:01 [weibospider] DEBUG: Read 1 requests from 'weibospider:start_urls'

2017-10-20 17:11:03 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://weibo.cn/2810373291/fans> (referer: None)

说明了从redis中取出了刚刚放进入的start_urls,然后爬虫就会开始爬取了哦

中途任意时间可以运行上面的命令将start_urls push进redis 进行爬取
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: