scrapy爬虫類 - プロキシIPミドルウェア

クラスProxyDownloaderMiddleware(オブジェクト):
    ないすべてのメソッドを定義する必要があります。メソッドが定義されていない場合は、
    ダウンローダミドルウェアは変更しないかのようにscrapyは働き
    渡されたオブジェクトを。
    デフ __init__ (自己):
        self.request_proxy_url = "" 
        self.IpPool =キュー()  维护代理IP池 
        self.Ipset =セット()  记录已经取到的代理IP 
        self.request_proxry(数= 5 

    DEF request_proxry(自己、番号= 5 ):
         「」」
        :PARAM数:取得プロキシの数
        :リターン
        ""」
        もしself.IPportQueue.qsize()> 8 リターン
        URL = ' https://dps.kdlapi.com/api/getdps/?orderid=987658645908252&num=%d&pt=1&dedup=1&format=json&sep=1 '番号
         #のlock.acquire () 
        R = requests.get(URL)
        lock.release() 
        DC = r.json()
        プリント(DC、 '123')
        のための項目 DC [ ' データ' ] [ ' proxy_list ' ]:
             もしアイテムself.IPset:
                引き続き
            self.IPportQueue.put({ ' ipport ':アイテム、' useTimes ' :0})
            self.IPset.add(アイテム)
            プリント(項目、' ++++++++++++++++ + ' 

    DEF :(自己)get_proxy_ip 
        アイテム = self.IpPool.get()
        項目[ " useTimes " ] + = 1
         であればアイテム[ " useTimes " ]> 10 
            self.request_proxry(番号 = 2 
            self.IpPoolを。 PUT(アイテム)
        リターン " https://で" +項目[ " ip_port " ] 

    @classmethod 
    DEF from_crawler(CLS、クローラ):
        このメソッドは、あなたのクモを作成するためにScrapyで使用されています。
        S = CLS()
        crawler.signals.connect(s.spider_opened、信号 = signals.spider_opened)
         リターン

    デフprocess一(自己、リクエスト、クモ):
        ダウンローダを通過する要求ごとに呼び出さ
        #のミドルウェア。

        いずれかの必要があります:
        -リターンなし:この要求の処理を続行しません
        -またはResponseオブジェクトを返す
        #を-またはRequestオブジェクトを返す
        #をにprocess_exception()のメソッド:IgnoreRequestのか、上げる- 
           ミドルウェアが呼び出されますダウンローダインストール 
        [request.meta 代理 ] = self.get_proxy_ip()

        の戻りなし

    デフprocess_responseを(自己、要求、応答、クモ):
        ダウンローダから返された応答で呼び出されます。

        #は、いずれかの必要があります。
        - Responseオブジェクトを返す
        #をRequestオブジェクトを返します- 
        -または昇給IgnoreRequestの
        戻り応答

    デフにprocess_exception(自己、要求、例外、クモ):
        ダウンロードハンドラまたはprocess一()ときに呼び出されます
        (他のダウンローダミドルウェアからは)例外を発生させます。

        #は、いずれかの必要があります:
        -リターンなし:この例外処理を継続
        #を- Responseオブジェクトを返しますにprocess_exception()連鎖停止した
        #を- Requestオブジェクトを返すには:にprocess_exception()連鎖停止していない
        パス

    DEF :(自己、クモ)spider_opened 
        spider.loggerを。情報(' スパイダーが開か:%sの'%spider.name)

おすすめ

転載: www.cnblogs.com/loveprogramme/p/12070407.html