zoukankan      html  css  js  c++  java
  • 利用redis中列表数据类型构建共享消息队列

    为了应对大规模爬虫,可食用分布式爬虫技术,分布式爬虫技术中有一项技术必须解决:多态主机共同爬取大量url地址,如何剔除或者识别已爬取的url,为了解决这项技术问题,可以借助redis中列表数据类型,实现url的存储,然后通过一台主机负责爬取url,其他主机负责请求redis数据库中保存的url,具体代码如下:

    '''负责产生url地址'''
    import redis
    import random
    import time
    
    r = redis.Redis(host='127.0.0.1', port=6379, db=0, password=123456)
    # 生成很多URL地址,放到redis列表中
    for i in range(1, 51):
        url = 'http://app.mi.com/#page=' + str(i)
        # 放入到redis列表
        r.lpush('xiaomi:urls', url)
        # 随机休眠3~5秒
        time.sleep(random.randint(3, 5))
    
    
    
    ===================================================
    '''从xiaomi:urls中获取地址,进行数据抓取'''
    import redis
    
    r = redis.Redis(host='127.0.0.1', port=6379, db=0, password=123456)
    
    while True:
        # 从列表中获取地址,结果为元组,或者None
        url = r.brpop('xiaomi:urls', 6)
        print(url)
        if url:
            print(url[1].decode())
            print('正在抓取.....')
        else:
            print('抓取结束')
            break
  • 相关阅读:
    jquery1.9之学习笔记
    ERROR: Removing 'hello': Device or resource busy
    windows虚拟机性能调整
    kvm虚拟机控制台登录配置
    KVM虚拟机的管理
    window kvm 虚拟机的创建
    kvm虚拟化环境的搭建
    C实现哈希表
    哲学家就餐问题 C语言实现
    Linux面试题
  • 原文地址:https://www.cnblogs.com/yuxiangyang/p/11190678.html
Copyright © 2011-2022 走看看