华南俳烁实业有限公司

python

當(dāng)前位置:中華考試網(wǎng) >> python >> python爬蟲 >> 文章內(nèi)容

rpop方法如何在python分布式爬蟲中使用?

來源:中華考試網(wǎng)  [2020年11月26日]  【

  我們現(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)

python課程免費(fèi)試聽預(yù)約

  • 地區(qū):
  • 姓名:
  • 手機(jī):

  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ù)的過程。

責(zé)編:fushihao

上一篇:python爬蟲節(jié)點(diǎn)是什么?怎么用?

下一篇: 沒有了

  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學(xué)歷考試
汤阴县| 漾濞| 丹东市| 苗栗县| 安丘市| 修水县| 鄯善县| 大石桥市| 子长县| 岑巩县| 昭苏县| 隆昌县| 全南县| 温宿县| 南靖县| 区。| 安多县| 密山市| 新田县| 松阳县| 庄浪县| 洪洞县| 平潭县| 武城县| 雷山县| 绥棱县| 精河县| 修武县| 包头市| 肇庆市| 繁峙县| 武穴市| 台安县| 南川市| 泸定县| 惠安县| 闸北区| 南华县| 玉门市| 湄潭县| 潢川县|