安裝完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 進行爬取