我们现实中的商品流通而言,有新的商品生产,就有新的商品在市面上流通,我们的爬虫也是如此。前期获取的数据存储在消息列表,然后爬虫需要把数据从消息列表中搬走,这就是站在了消费的角度。在这个过程中我们需要使用到rpop方法,接下来小编就带大家看看其在python分布式爬虫中的使用。
下面的代码是消费端爬虫程序的示例
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的队列中拉取数据进行爬取,考虑到生产者随时都可能写入新的任务,因此,必须使用死循环,得不到消息时,sleep一段时间,继续获取消息。
关于部署
生产端的程序,消费端的程序可以随意部署,但不管如何,都要确保这些机器与redis所在的机器是网络连通的,因为他们一个要写消息到redis,一个要从redis拉取任务,至于生产端和消费端是否网络连通则没有任何必要,甚至同一端的worker之间也不必网络连通
数据存储 消费端的worker在爬取数据以后,可以根据实际需要决定是否直接落库,如果需要对数据进行规范化处理或是其他操作,则可以写入新的消息队列中,由下一个工序的worker拉取数据进行处理
有了类似消息列表的这个盒子,爬虫需要获取的数据就可以暂时放在其中和搬运出来,这也就是整个分布式爬虫获取数据的过程。
下一篇: 没有了
一级建造师二级建造师消防工程师造价工程师土建职称房地产经纪人公路检测工程师建筑八大员注册建筑师二级造价师监理工程师咨询工程师房地产估价师 城乡规划师结构工程师岩土工程师安全工程师设备监理师环境影响评价土地登记代理公路造价师公路监理师化工工程师暖通工程师给排水工程师计量工程师
执业药师执业医师卫生资格考试卫生高级职称护士资格证初级护师主管护师住院医师临床执业医师临床助理医师中医执业医师中医助理医师中西医医师中西医助理口腔执业医师口腔助理医师公共卫生医师公卫助理医师实践技能内科主治医师外科主治医师中医内科主治儿科主治医师妇产科医师西药士/师中药士/师临床检验技师临床医学理论中医理论