1.2 常見異常的處理方法
阿新 • • 發佈:2019-02-20
簡單 1.2 req 獲取網頁 quest 處理方法 鏈接 註意 方法
在import後面的第一行代碼:
html = urlopen("http://www.baidu.com")
常見的異常主要有以下兩種:
- 網頁在服務器上不存在(或者獲取頁面的時候出現錯誤)
- 服務器不存在
第一種錯誤時,程序會返回HTTP錯誤。HTTP錯誤可能是“404 Page Not Found”,“500 Internal Server Error”等等。所有類似的情形,對於urlopen函數來說,都會拋出“HTTPError”異常。我們可以用以下方式處理這種異常:
try: html = urlopen("http://www.baidu.com") except HTTPError as e: print(e) #如果返回空值,中斷程序,或者執行另一個方案 else: #程序繼續。註意:如果你已經在上面異常捕捉那一段代碼裏返回或者中斷(break), # 那麽就不需要使用else語句了,這段代碼就不會再執行了。
如果程序服務器不存在(鏈接寫錯了,或者鏈接打不開),urlopen會返回一個None對象。這個對象與其他編程語言中的null相似。我們可以用一個判斷語句來檢測返回的html是不是None:
if html is None: print("URL is not found.") else: # 程序繼續
在服務器成功獲取網頁後,如果網頁上的內容不是我們預期的那樣的,仍然可能會出現異常。因此,每次在調用BeautifulSoup時,最好加一個檢查條件,以保證標簽確實存在。假如調用的標簽不存在,BS就會返回一個None對象。不過,如果再調用這個None下的子標簽時就會返回AttributeERROR錯誤。
print ("bs0bj.nonExistentTag")
會返回一個None對象。處理和檢查這個對象十分必要。如果直接調用這個對象的子標簽,就會出現異常:
print("bs0jb.nonExistentTag.someTag") # 下面會返回一個異常 AttributeError: ‘NoneType‘ object has no attribute ‘someTag‘
下面的代碼是同時檢測兩種異常的簡單代碼方法:
try: badContent = bs0bj.nonExistingTag.anotherTag except AttributeError as e: print("Tag is not found.") else: if badContent ==None: print("Tag was not found.") else: print(badContent)
如下是一個實例書寫:
from urllib.request import urlopen from urllib.error import HTTPError from bs4 import BeautifulSoup def getTittle(url): try: html = urlopen(url) except HTTPError as e: return None try: bs0bj = BeautifulSoup(html.read()) title = bs0bj.body.h1 except AttributeError as e: return None return title title = getTittle("http://www.pythonscraping.com/pages/page1.html") if title ==None: print("Title could not be found.") else: print(title)
1.2 常見異常的處理方法