我們現(xiàn)實中的商品流通而言,有新的商品生產(chǎn),就有新的商品在市面上流通,我們的爬蟲也是如此。前期獲取的數(shù)據(jù)存儲在消息列表,然后爬蟲需要把數(shù)據(jù)從消息列表中搬走,這就是站在了消費(fèi)的角度。在這個過程中我們需要使用到rpop方法,接下來小編就帶大家看看其在python分布式爬蟲中的使用。
下面的代碼是消費(fèi)端爬蟲程序的示例
import time
import redis
r = redis.Redis(host='127.0.0.1', port=6379,
password='yourpassword', db=1)
# 爬蟲程序
def crawl(task):
print('爬取url {task}'.format(task=task))
time.sleep(1)
while True:
task = r.rpop('url_queue')
if not task:
time.sleep(1)
continue
crawl(task)
爬蟲程序要不停的使用rpop方法從redis的隊列中拉取數(shù)據(jù)進(jìn)行爬取,考慮到生產(chǎn)者隨時都可能寫入新的任務(wù),因此,必須使用死循環(huán),得不到消息時,sleep一段時間,繼續(xù)獲取消息。
關(guān)于部署
生產(chǎn)端的程序,消費(fèi)端的程序可以隨意部署,但不管如何,都要確保這些機(jī)器與redis所在的機(jī)器是網(wǎng)絡(luò)連通的,因為他們一個要寫消息到redis,一個要從redis拉取任務(wù),至于生產(chǎn)端和消費(fèi)端是否網(wǎng)絡(luò)連通則沒有任何必要,甚至同一端的worker之間也不必網(wǎng)絡(luò)連通
數(shù)據(jù)存儲 消費(fèi)端的worker在爬取數(shù)據(jù)以后,可以根據(jù)實際需要決定是否直接落庫,如果需要對數(shù)據(jù)進(jìn)行規(guī)范化處理或是其他操作,則可以寫入新的消息隊列中,由下一個工序的worker拉取數(shù)據(jù)進(jìn)行處理
有了類似消息列表的這個盒子,爬蟲需要獲取的數(shù)據(jù)就可以暫時放在其中和搬運(yùn)出來,這也就是整個分布式爬蟲獲取數(shù)據(jù)的過程。
上一篇:python爬蟲節(jié)點(diǎn)是什么?怎么用?
下一篇: 沒有了
初級會計職稱中級會計職稱經(jīng)濟(jì)師注冊會計師證券從業(yè)銀行從業(yè)會計實操統(tǒng)計師審計師高級會計師基金從業(yè)資格稅務(wù)師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價格鑒證師統(tǒng)計資格從業(yè)
一級建造師二級建造師消防工程師造價工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測工程師建筑八大員注冊建筑師二級造價師監(jiān)理工程師咨詢工程師房地產(chǎn)估價師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評價土地登記代理公路造價師公路監(jiān)理師化工工程師暖通工程師給排水工程師計量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會工作者司法考試職稱計算機(jī)營養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護(hù)士資格證初級護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗技師臨床醫(yī)學(xué)理論中醫(yī)理論