爬蟲代理遇到請求超時(shí)怎么辦?
很多爬蟲工作在使用爬蟲代理的時(shí)候會遇到請求超時(shí)的問題,代碼就卡在哪里,不報(bào)錯(cuò)也沒有requests請求的響應(yīng)。遇到這種情況該怎么辦呢?和天啟代理IP來看看吧。
為防止服務(wù)器不能及時(shí)響應(yīng),大部分發(fā)至外部服務(wù)器的請求都應(yīng)該帶著 timeout 參數(shù)。在默認(rèn)情況下,除非顯式指定了 timeout 值,requests 是不會自動進(jìn)行超時(shí)處理的。如果沒有 timeout,你的代碼可能會掛起若干分鐘甚至更長時(shí)間。
連接超時(shí)指的是在你的客戶端實(shí)現(xiàn)到遠(yuǎn)端機(jī)器端口的連接時(shí)(對應(yīng)的是 connect() ),Request 會等待的秒數(shù)。一個(gè)很好的實(shí)踐方法是把連接超時(shí)設(shè)為比 3 的倍數(shù)略大的一個(gè)數(shù)值,因?yàn)?TCP 數(shù)據(jù)包重傳窗口 (TCP packet retransmission window) 的默認(rèn)大小是 3。
爬蟲代理遇到鏈接超時(shí),通常的處理是在requests.get()語句中加入timeout限制請求時(shí)間
req = requests.get(url, headers=headers, proxies=proxies, timeout=5)
如果發(fā)現(xiàn)設(shè)置timeout=5后長時(shí)間不響應(yīng)問題依然存在,可以將timeout里的參數(shù)細(xì)化
作出如下修改后,問題就消失了
req = requests.get(url, headers=headers, proxies=proxies, timeout=(3,7))
---------------------
timeout=(3,7) = (connect timeout,read timeout)
timeout是用作設(shè)置響應(yīng)時(shí)間的,響應(yīng)時(shí)間分為連接時(shí)間和讀取時(shí)間,timeout(3,7)表示的連接時(shí)間是3,響應(yīng)時(shí)間是7。
一般使用以上的方法都能解決請求超時(shí)的問題。