當前位置:
首頁 > 最新 > 一隻健壯的Python爬蟲應當怎麼處理異常情況

一隻健壯的Python爬蟲應當怎麼處理異常情況

在爬蟲連接和請求URL的過程中,由於伺服器、通信鏈路等原因,會產生各種錯誤和異常,比如,連接超時、頁面不存在、網站關閉、禁止訪問等等。為了提高爬蟲的魯棒性,在設計時需要考慮各種可能出現的問題,並針對這些問題給出合理的解決方法,避免爬蟲程序崩潰。

當用Python來實現爬蟲時,URL連接和HTTP訪問時產生的錯誤會被封裝到URLErrorHTTPError這兩個類中,其中HTTPError是URLError的子類。使用標準庫urllib2提供的函數進行HTTP請求時,需要按照try…except的形式來捕獲錯誤,具體的使用方法如下,

import urllib.request

req = urllib.request.Request("http://news.fudan.edu.cn/2018/0715/46227.html")

try:

except urllib.error.URLError as e:

if hasattr(e,"code"): #處理HTTPError

print("伺服器返回的錯誤碼是:",e.code)

elif hasattr(e,"reason"): #處理其他的URLError

print("伺服器無法連接的原因是:",e.reason)

else:

print("訪問正常!")

另一種是異常是超時,在爬蟲獲取Web頁面時可能由於伺服器負荷過大,導致響應延緩,因此,需要適當考慮超時處理,否則就容易使得爬蟲一直處於等待狀態。在這種情況下,可以使用timeout參數,設置為某個特定的數值。如果在這個數值範圍(秒)內,Web伺服器沒有響應,則會產生超時異常。下面這段代碼顯示了如何處理連接中的超時。

import urllib.request

import re

try:

data=html.read()

a = html.geturl() #獲取當前抓取頁面的URL

print(a)

print(len(data))

except Exception as e:

print("異常:" + str(e))

作者編著的《互聯網大數據處理技術與應用》專著(清華大學出版社,2017)、同名公眾號,專註於大數據技術的相關科學和工程知識傳播,同時也為讀者提供一些拓展閱讀材料。歡迎選用本書做大數據相關專業的教材,有相關教學資源共享。

...


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python爬蟲實戰:批量採集股票數據,並保存到Excel中
如何用Python爬取LOL官網全英雄皮膚

TAG:Python |