【爬蟲基礎介紹】part2: HTTP架構

從上篇文章中我們可以瞭解

  • 爬蟲的本質是要模擬人類瀏覽網頁的行為
  • 實際我們在瀏覽網頁時,瀏覽器與伺服器之間如何傳遞訊息

若對上一篇文章有興趣,可參考【爬蟲基礎介紹】part1: 什麼是爬蟲?

爬蟲的本質是模擬人類瀏覽網頁的行為,人類操作瀏覽器瀏覽網頁,也就是最終程式需要模擬瀏覽器與伺服器互動,不被發現偽裝,才能成功完成擷取數據的過程。因此我們需要瞭解瀏覽器與伺服器如何互動

本篇文章會更深入說明,瀏覽器與伺服器在互動時的角色與行為規範

request與response

如同part1文章所述,我們想知道博客來2021年度百大暢銷榜有哪些書? 博客來2021年度百大暢銷榜

當我們點擊博客來的網頁時,有四個專有名詞需要瞭解

  • 客戶端(Client):連網設備、瀏覽器,會發送 請求 (request) 到Server
  • 伺服器端(Server):收到Client發送的request,開始處理請求,並 回應 (response) 到Client
  • 請求資料(request):Client向Server 索取資料 的行為
  • 回應資料(response):Server 回傳資料 到Client的行為

我們可以先想像在Client與Server間有個郵差協助彼此互相傳遞消息,請求必有回應,
最後資料呈現於網頁上,如下圖:

HTTP協議

引用維基百科說明

request-response: 電腦在電腦網路中用來相互通信的基本方法

而網路通訊的規範基礎即HTTP協議,也就是超文本傳輸協定

就像是寫信時,必須要有特定的信封,收件人必須要寫在中間,信封左右或上下寫上寄件人與收件人的地址,郵差才能迅速無誤幫我們寄出信件一樣,網路傳輸時需要遵守特定的規範,才能讓Client與Server之間能看懂訊號,並回傳正確的數據。

不知道大家是否曾經在瀏覽網頁時收到以下畫面
無論是無法找到IP位置,或者是網頁回應時間過長無法連線等等訊息,都是告訴你現在網頁無法連線

  1. 如何透過HTTP得知現在網頁是否連線成功? 若無法連線是什麼原因造成?可以透過

HTTP狀態碼(HTTP Status Code)

HTTP 狀態碼以數字表示,通常以開頭的數字可以判斷連線狀況
一般成功連上網頁的Status Code為200,更多可參考
A. MDN技術文件
B. 常見與不常見的 HTTP Status Code(有趣的說明)

  • 1XX : 臨時訊息提示,通常代表請求被接受,可繼續請求
  • 2XX : 請求成功,常見代碼為200
  • 3XX : 網頁重新導向,常見代碼為302,用戶需要採取進一步的行動才能完成請求
  • 4XX : 客戶端錯誤,常見代碼為404,找不到伺服器位置(網址打錯之類)
  • 5XX : 伺服器遇到錯誤,無法完成請求,常見代碼為504,Gateway Time-out
  1. 如何讓瀏覽器與伺服器溝通良好呢? 需透過一些額外資料的設定,這些設定稱為

HTTP 表頭(HTTP headers)

一般在爬蟲程式,我們只討論Request headers,更多可參考維基百科

常用到的headers

  • Cookie : Server傳送予使用者瀏覽器的一個小片段資料,可追蹤記錄並分析使用者行為
  • User-Agent : Server從用戶的軟體規格、瀏覽器類別、版本號…等識別請求的Client為手機、電腦或平板,從而選擇適當的內容回應
  • Content-Type : Server回傳的內容格式
  • Referer : 當前網頁的上一頁從哪裡來
  • Host : Server主機位置
  1. 如何向瀏覽器請求資料?

HTTP定義幾種標準方法可以向網址(URL)執行特定操作的請求方法
一般常見的兩種為GET & POST,關於兩者差別,更詳細可參考表單中的 GET 與 POST 有什麼差別?

  • GET: 向Server取得資料,所有提交的數據都顯示在 URL(網址)
    • 舉例:單純向Server取得文字、圖片等資訊
  • POST: 向Server新增/提交數據,數據被包在message-body內
    • 舉例:網頁登入會員資訊

其他Request Method,可參考MDN技術文件

  • PUT : 取代request指定的數據
  • PATCH : 修改部分request指定的數據
  • DELETE : 刪除指定資源
  • HEAD : 只獲取request的header,不要response body
  • OPTIONS : 查看Server提供哪些Request Method
  • CONNECT : 通常用於代理伺服器(Proxy Server)
  • TRACE : 回傳Server收到的request,主要用於測試

request-response 溝通範例

向博客來送出請求,回傳博客來2021年度百大暢銷榜數據,request-response內容:

電腦規格(User-Agent參考)

  • 作業系統:Mac OS
  • 瀏覽器:Safari

Request

  • URL: https://www.books.com.tw/web/annual10

  • Request Method: Get

  • Message Body: 無

  • Request Headers (僅列出部分):

    • Host: www.books.com.tw
    • Referer: https://www.books.com.tw
    • User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15

Response

  • Response Status code: 200
  • Response body: 博客來2021年度百大暢銷榜網頁數據
  • Response Headers (僅列出部分):
    • Content-Type: text/html; charset=UTF-8
    • Expires: Mon, 27 Jun 2022 07:51:02 GMT
    • Cache-Control:max-age=0

備註

從Anaconda到pyenv:在ubuntu上使用pyenv建立Python開發環境 【爬蟲基礎介紹】part1: 什麼是爬蟲?

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×