iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
Software Development

Python 爬蟲這樣學,一定是大拇指拉!系列 第 20

[Python 爬蟲這樣學,一定是大拇指拉!] DAY20 - Python:Requests 基本應用 (3)

這篇是基礎應用的最後一篇,主要補充講解幾個基本功能。

檢查 Response Status

  • 當我們在爬蟲拿到 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
    

    HTTP Status 複習傳送門

Timeouts

  • 當然,爬蟲時萬一遇到網路狀況,我們總不可能讓程式繼續在那邊一直 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)
    

Errors and Exceptions

  • 稍微整理一下 Requests 套件的 Exceptions:
    • 當遇到一些網路問題,像是:DNS failure、refused connection 等, 會 raise requests.exceptions.ConnectionError。
    • 所有 Requests 都是繼承自 requests.exceptions.RequestException。

以上就是 Requests 套件的基本應用解說!
到目前為止,基本上可以應付大部分情況了,接下來的篇章將要進入實作篇囉!

另外這是 Requests 的 Interface 文件,如果讀者有時間的話可以稍微看一下。可以更清楚知道怎麼使用套件內的功能。

本篇章"Python:Requests 基本應用"系列參考資料

[1] Requests - Quickstart


上一篇
[Python 爬蟲這樣學,一定是大拇指拉!] DAY19 - Python:Requests 基本應用 (2)
下一篇
[Python 爬蟲這樣學,一定是大拇指拉!] DAY21 - 實戰演練:JSON Response - 抓取個股日成交資訊
系列文
Python 爬蟲這樣學,一定是大拇指拉!30

尚未有邦友留言

立即登入留言