中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

RabbitMQ怎么在python分布式爬蟲中構建-創(chuàng)新互聯(lián)

這篇文章主要介紹RabbitMQ怎么在python分布式爬蟲中構建,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

白云鄂ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

RabbitMQ是比較靠譜的消息中間件,得益于它的確認機制,當一條消息消費后如果設置確定模式,那么確認后才會繼續(xù)消費,如果不確定認,那么這個任務將分配給其他消費者。

基于這種確認機制,可以在高可靠性和高數(shù)據(jù)要求情景中,避免數(shù)據(jù)抓取的遺漏和丟失。

其設計思路應該是基于mq設計兩個接口,一個用于URL的存放,一個用戶URL的獲取,同時基于Redis的URL去重,通過類似scrapy-redis 的調度使爬蟲運行。

主程序示例:

import pika
 
 
class RabbitMQBASE:
 
    def __new__(cls, *args, **kw):
        if not hasattr(cls, '_instance'):
            org = super(RabbitMQBASE, cls)
            cls._instance = org.__new__(cls)
        return cls._instance
 
    def __init__(self, use='root', pwd='111'):
        user_pwd = pika.PlainCredentials(use, pwd)
        self.s_conn = pika.BlockingConnection(
            pika.ConnectionParameters(host='1.1.1.1', heartbeat_interval=3600, credentials=user_pwd))
 
    def channel(self):
        return self.s_conn.channel()
 
    def close(self):
        """關閉連接"""
        self.s_conn.close()
 
    @staticmethod
    def callback(ch, method, properties, body):
        print(" [消費者] %r" % body)
 
 
class RabbitMQ(RabbitMQBASE):
    """
    type_:交換機類型fanout、direct、topic
    exchange:交換機名字
    queue_name:隊列名字,為空則隨機命名
    exclusive:隊列是否持久化False持久,True不持久
    key_list:消費者的交換機、隊列綁定的關鍵詞列表
    key:生產(chǎn)者路由的關鍵詞
    no_ack:是否確認消息True不確定,False確定
    """
    def __init__(self, use='root', pwd='Kw7pGR4xDD1CsP*U', type_='direct', exchange='test',
                 queue_name=None, exclusive=True, key_list=['test'], key='test', no_ack=True):
        RabbitMQBASE.__init__(self, use=use, pwd=pwd)
        self.type_ = type_
        self.exchange = exchange
        self.queue_name = queue_name
        self.exclusive = exclusive
        self.key = key
        self.key_list = key_list
        self.no_ack = no_ack
 
    def rabbit_get(self):
        """消費者"""
        channel = self.channel()
        channel.exchange_declare(exchange=self.exchange, exchange_type=self.type_)
        if self.queue_name == None:
            result = channel.queue_declare(exclusive=self.exclusive)
            self.queue_name = result.method.queue
        if self.type_ != 'fanout':
            for key in self.key_list:
                channel.queue_bind(exchange=self.exchange,  # 將交換機、隊列、關鍵字綁定
                                   queue=self.queue_name, routing_key=key)
        channel.basic_consume(RabbitMQBASE.callback, queue=self.queue_name, no_ack=self.no_ack)
        channel.start_consuming()
 
    def rabbit_put(self, message='hello word'):
        """生產(chǎn)者"""
        channel = self.channel()
        channel.exchange_declare(exchange=self.exchange, exchange_type=self.type_)
        if self.type_ == 'fanout':
            self.key = ""
        channel.basic_publish(exchange=self.exchange, routing_key=self.key, body=message)
        channel.close()

以上是“RabbitMQ怎么在python分布式爬蟲中構建”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章題目:RabbitMQ怎么在python分布式爬蟲中構建-創(chuàng)新互聯(lián)
文章URL:http://www.rwnh.cn/article16/cchjdg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站營銷網(wǎng)站設計公司、App開發(fā)、做網(wǎng)站、虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
姚安县| 怀来县| 徐汇区| 廉江市| 磴口县| 清远市| 武定县| 广宗县| 海安县| 丹巴县| 金阳县| 历史| 油尖旺区| 神木县| 广丰县| 加查县| 得荣县| 阳原县| 彭阳县| 满洲里市| 红桥区| 宜春市| 涿鹿县| 扎鲁特旗| 健康| 澜沧| 白沙| 芮城县| 额济纳旗| 周宁县| 临洮县| 安吉县| 西乡县| 桦川县| 湘潭市| 丹江口市| 竹北市| 县级市| 清丰县| 古浪县| 绥德县|