• 利用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
  • 相关阅读:
    HDU3555:Bomb
    入门OJ:售货员的难题
    Zju1100 Mondriaan
    与图论的邂逅08:树上倍增
    入门OJ:八中生成树2
    Poj2286 The Rotation Game
    P1379 八数码难题
    [SCOI2005]骑士精神
    与图论的邂逅07:K短路
    [Usaco2007 Feb]Cow Party
  • 原文地址:https://www.cnblogs.com/yuxiangyang/p/11190678.html
Copyright © 2020-2023  润新知