這是第一次寫分布式爬蟲,所以寫得比較簡單璃吧,這次主要是利用上次知乎爬蟲的代碼,然后部署在兩臺機器上,一臺是本地的win7系統(tǒng)秒际,一臺是騰訊云的烏班圖系統(tǒng),在烏班圖系統(tǒng)上的代碼直接從github上拷過去就好了蹂空。這個爬蟲的部署比較簡單舰始,兩臺機器同時抓取,然后數(shù)據(jù)全部保存到烏班圖系統(tǒng)的mongodb數(shù)據(jù)庫峻堰,首先我們在seetings文件里面增加這幾句
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_URL = 'redis://root:myredis@124.107.126.72:6379'
第一句是啟動scrapy_redis的調(diào)度器讹开,不適用默認的,
第二句是啟用去重功能捐名,scrapy爬蟲里面利用yield生成器返回待訪問的URL旦万,將他們放進隊列,爬蟲會進去隊列領(lǐng)取URL進行爬取桐筏,啟用該功能后纸型,每個放進去的URL都會先經(jīng)過去重,里面爬取過的URL也會在redis數(shù)據(jù)庫里面貼上唯一的指紋梅忌,防止下次爬取一樣的URL狰腌,也就是為了以后進來新的URL進行去重。
第三句是鏈接烏班圖系統(tǒng)里面的redis數(shù)據(jù)牧氮,之前的鏈接指紋琼腔,返回的item數(shù)據(jù)都會自動儲存在該數(shù)據(jù)庫,當然必須啟動如圖這個pipline
如果沒有啟動這個pipline踱葛,則redis只會保存請求指紋丹莲,請求信息等數(shù)據(jù),爬取的item是不會保存的尸诽,這樣也可以節(jié)省網(wǎng)絡(luò)流量甥材。
對于保存數(shù)據(jù)的pipline也要做相應(yīng)的修改,如圖
把數(shù)據(jù)統(tǒng)一保存在騰訊云主機上性含,然后我們直接在主機洲赵,以及騰訊云服務(wù)器上運行代碼就好了。
總結(jié):scrapy-redis為我們使用分布式爬蟲提供了一個很好的調(diào)度器商蕴,把我們需要爬取的URL全部放進一個隊列叠萍,且實現(xiàn)去重,我們只要啟動不同主機的代碼绪商,然后共同鏈接到某一臺主機(宿主機)的redis數(shù)據(jù)庫就可以了苛谷,爬蟲會自動到隊列領(lǐng)取URL進行爬取,然后也會把新的URL放進去格郁。
最后上張結(jié)果圖
也就不足幾分鐘的功夫腹殿,已經(jīng)成功爬取了5000+用戶的信息