クラス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)
scrapy爬虫類 - プロキシIPミドルウェア
おすすめ
転載: www.cnblogs.com/loveprogramme/p/12070407.html
おすすめ
ランキング