天天看點

linux分布式scrapy爬蟲之安裝scrapy-redis

安裝完redis後,進入到redis目錄下

輸入redis-cli 會有提示安裝 sudo apt-get install redis-tools

再輸入:redis-server /etc/redis.conf 會有提示安裝:sudo apt-get install redis-server

測試:

輸入:[email protected]:~/.local/lib/python2.7/site-packages/redis$ redis-cli

127.0.0.1:6379> 

修改配置檔案::

[email protected]:/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

測試:[email protected]:/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 進行爬取