這篇是基礎應用的最後一篇,主要補充講解幾個基本功能。
當我們在爬蟲拿到 Response 時,通常為了要確保內容正確,都會檢查 HTTP Status,如果不是 200 的話,就得要做一些例外處理,傳統的做法會像是:
import requests
r = requests.get("https://www.example.com")
# 方法1
if r.status_code != 200:
# do something here
# 方法2
if r.status_code != requests.codes.ok:
# do something here
Requests 有提供更方便的做法:
import requests
r = requests.get("https://www.example.com")
# 如果 status != 200 就會 throw exception
r.raise_for_status()
使用 raise_for_status() 的話,程式就會 raise 一個 requests.exceptions.HTTPError,讓使用者可以更好的集中處理這些 errors。
以下是官方範例:
>>> bad_r = requests.get("https://httpbin.org/status/404")
>>> bad_r.status_code
404
>>> bad_r.raise_for_status()
Traceback (most recent call last):
File "requests/models.py", line 832, in raise_for_status
raise http_error
requests.exceptions.HTTPError: 404 Client Error
當然,爬蟲時萬一遇到網路狀況,我們總不可能讓程式繼續在那邊一直 retry 直到系統 timeout 而浪費頻寬,因此 Requests 套件有提供自定義 timeout 的方式,讓爬蟲程式寫起來更有彈性。
import requests
r = requests.get("https://www.example.com", timeout=1)
# 如果 timeout 就會 throw exception
timeout 的話,程式就會 raise 一個 requests.exceptions.Timeout。
以下是官方範例:
>>> requests.get("https://github.com/", timeout=0.001)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)
以上就是 Requests 套件的基本應用解說!
到目前為止,基本上可以應付大部分情況了,接下來的篇章將要進入實作篇囉!
另外這是 Requests 的 Interface 文件,如果讀者有時間的話可以稍微看一下。可以更清楚知道怎麼使用套件內的功能。