溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在scrapy請(qǐng)求異常之后再設(shè)置代理IP

發(fā)布時(shí)間:2021-10-28 18:46:31 來(lái)源:億速云 閱讀:211 作者:柒染 欄目:大數(shù)據(jù)

如何在scrapy請(qǐng)求異常之后再設(shè)置代理IP,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

我們都知道 scrapy 可以設(shè)置代理 IP,但是不知道大家有沒(méi)有遇到這樣一個(gè)場(chǎng)景:

常規(guī)的代理 IP 設(shè)置,會(huì)對(duì)每個(gè)請(qǐng)求都生效,也就是說(shuō)每個(gè)請(qǐng)求都會(huì)去使用代理

但是有些請(qǐng)求根本不需要代理,我希望當(dāng)我的請(qǐng)求出現(xiàn)錯(cuò)誤或超時(shí)的時(shí)候再去設(shè)置代理 IP

這樣既節(jié)省了資源,又縮短了請(qǐng)求的時(shí)間,畢竟有些代理質(zhì)量真的一言難盡

那么怎么才能讓它請(qǐng)求超時(shí)的時(shí)候,再使用代理 IP 進(jìn)行重新請(qǐng)求呢?

很容易就想到下載中間件,DowmloaderMiddleware

一個(gè)介于 request, response 中間的鉤子,用于修改 request 和處理 response

首先我們需要捕獲超時(shí)等異常的請(qǐng)求,在下載中間件中添加如下代碼:

from twisted.internet.error import TCPTimedOutError, TimeoutError

def process_exception(self, request, exception, spider):
        if isinstance(exception, TimeoutError):
            self.process_request_back(request, spider)  # 連接超時(shí)才啟用代理ip機(jī)制
            return request

        elif isinstance(exception, TCPTimedOutError):
            self.process_request_back(request, spider)
            return request
 

以上代碼的作用就是捕獲異常請(qǐng)求,同時(shí)調(diào)用設(shè)置代理 IP 的函數(shù),并返回該請(qǐng)求

下面的設(shè)置 IP 的代碼

def process_request_back(self, request, spider):
        request.meta["proxy"] = xun.proxy
        request.headers["Proxy-Authorization"] = xun.headers
 

注意不能使用 process_request() 方法, 如果代理添加在該方法下,就是常規(guī)的代理 IP 方法

同時(shí)對(duì)于 scrapy 出現(xiàn) TimeoutError,TCPTimedOutError 等異常的時(shí)候,還可以通過(guò)以下幾種方案來(lái)解決:

主要通過(guò)設(shè)置文件來(lái)更改

 

1、降低同時(shí)請(qǐng)求的數(shù)量

CONCURRENT_REQUESTS = 5
     

2、 增加超時(shí)時(shí)間

DOWNLOAD_TIMEOUT = 300
     

3、 增加異常重試次數(shù)

RETRY_TIMES = 5
    

關(guān)于如何在scrapy請(qǐng)求異常之后再設(shè)置代理IP問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI