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

来源:互联网 发布:利搜排名软件 编辑:程序博客网 时间:2024/06/05 19:03
安装完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 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 进行爬取