想做一下高大上的scrapy_redis爬蟲程序,又覺得我這種水貨做不來,後來各種查教程,試驗,還算做出來一個像分佈式的東西,不過還是記錄一下,反正開幾個終端模擬分佈式,數據庫裏的數據確實沒重複的,也能湊乎着用吧
首先搭建scrapy,額。。反正就是先別管啥分佈式,做一個scrapy爬蟲出來再說。
當你的scrapy爬蟲能運行成功,數據庫裏能有數據的時候,改成分佈式,
settings.py文件最後加這麼一段話:
DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER="scrapy_redis.scheduler.Scheduler"
#默認爲False,會在爬取完成後清空爬取隊列和去重指紋集合。如果不想清空它們,就設置爲True:
SCHEDULER_PERSIST=True
REDIS_URL="redis://127.0.0.1:6379"
# 同時爲保證能夠把數據同時存儲到sql中我們還要設置相關pipline
ITEM_PIPELINES={
#這個是你之前的scrapy爬蟲管道的設置,從上面移下來就好了,注意權重優先級要低於redis管道
'test_scarpy_redis.pipelines.TestScarpyRedisPipeline':500,
#這個是redis數據庫的管道設置,pipline.py文件裏不用寫redis數據庫操作,人家封裝好了,我們把管道接上就行了。當然,你想存sql或者mongo的話,pipline.py裏面要寫sql或者mongo的數據庫操作
'scrapy_redis.pipelines.RedisPipeline':400
}
這段設置代碼加完之後再運行你的爬蟲,你的sql(mongo)和redis庫裏就有數據了,把它部署到不同的電腦上運行,就是分佈式了。同一臺電腦開多個終端運行也算模擬分佈式了,可以用來試驗。
redis庫中會出現三個字段:
藍框裏面的就是數據了,其他兩個好像是dupefilter是用來存儲抓取過的url的指紋,是防止重複抓取的,requests裏是存的待爬url.