iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
Modern Web

mitmproxy 在網路爬蟲上的各種應用系列 第 3

Day 3 速成爬蟲的第一課 : 請求

  • 分享至 

  • xImage
  •  

請求

請求 ( request ) 是爬蟲程式的起點,可以說是沒有請求,就沒有後面的程式碼

換句話說,一個有 input 和 output 的程式,你可能很習慣 input 來自於鍵盤的讀取、檔案系統,或者資料庫,而爬蟲程式的 input 就來自於「網路」

鍵盤的讀取、檔案系統,或者資料庫同時也可以以網路的形式傳入

而這邊指的網路,代表爬蟲的 input 是由 request 拿到的 response

HTTP

HTTP 協定是一個一來一往的交流,當你發起請求給伺服器,伺服器處理完畢後,也會給你一個回應,代表著英文的 request and response

而發起請求的方式相當簡單,當你打開瀏覽器,輸入網址後送出,並且看到 HTML 被解析成精美的網頁畫面時,你已經完成了一個請求

話說穿了,請求就是一個 HTTP 封包的發送和返回,所以你不見得只能用瀏覽器瀏覽網頁,你可以用 curl 或 wget 這種 Linux 原生的工具去瀏覽網頁

如果你會寫 HTTP 封包的話,你甚至可以用 Python 去瀏覽網頁對吧 ? 這也是為什麼會有網路爬蟲的誕生

不過在現代幾乎沒有人直接去寫 HTTP 封包本身,而是選擇用更高階的 HTTP 函式庫去處理爬蟲

這裡衍伸出一個問題 : 什麼程式語言都可以寫網路爬蟲嗎 ?

HTTP 是建立在 TCP 協定之上的應用層協定,而 socket 又是 TCP 的 API,所以只要你的程式語言能寫 socket,就能寫網路爬蟲

但就像我說的,大家都是使用 HTTP 函式庫在撰寫爬蟲,所以在選擇語言上,應該優先考慮該語言有沒有 HTTP 函式庫可用

我認為 Python 是一個相當適合做爬蟲的程式語言,這是我在比較過各種語言的 HTTP 函式庫後得出的結論

HTTP 請求方法

HTTP/1.1 請求方法一共有 8 種,分別是 GET、HEAD、POST、、PUT、DELETE、TRACE、OPTIONS 和 CONNECT,其中最常用的是 GET 和 POST

在不需要認證的情況下,GET 對爬蟲來說是最容易實作的,因為只要請求就一定能拿到回應

需要認證的情況和 POST 就相較複雜許多,可謂爬蟲程式裡的千變萬化

RESTful API 是一種設計風格,充分利用了 HTTP 請求方法的動詞去達成 API 格式的設計

比方說以下 4 種方法,分別可以代表 user 在資料庫裡面的 CRUD

  • 取得 user GET /user

  • 新增 user POST /user

  • 更新 user PUT /user

  • 刪除 user DELETE /user

HTTP 狀態碼

HTTP 狀態碼會是一個三位數,第一個數字代表著回應的類型

  • 1xx 代表請求正常,用戶端應該繼續完成請求

  • 2xx 代表請求正常

  • 3xx 代表重新導向

  • 4xx 代表客戶端錯誤

  • 5xx 代表伺服器端錯誤

常見的 HTTP 狀態碼有 200 代表請求正常 ; 301 或 302 代表重新導向 ; 403 代表無權限存取 ; 404 代表找不到這個網頁資源 ; 500 代表伺服器端錯誤

200 也會被稱作 200 OK,不過對爬蟲來說,有時候 200 並不見得是真正的沒問題

比方說,有一個 GET 頁面需要登入才看得見,沒有登入的情況下 GET 則會被重導向到登入頁面,其實回應碼通常也會是 200

即使整個請求過程沒有錯誤,但卻不能光靠 200 就判斷我們請求的頁面沒有問題

301 或 302 重新導向,有一個最直接的狀況

在大部份有規模的網站,你刻意在網址列使用 HTTP 而非 HTTPS 去連線,你通常會被重導向回 HTTPS 連線

403 無權限存取的狀況非常多變,比方說自架網頁伺服器的時候,只是因為檔案系統的權限沒有設定好,也會導致 403

這種錯誤通常可以在 log file 裡面發現 Permission denied 的訊息

403 也有可能是使用者真的觸碰到網頁伺服器的禁止規則,或者因為各種原因,被網站 ban 掉

404 就是那耳熟能詳的 404 Not Found,只要你請求到一個完全不存在的網頁,你就會得到 404

404 通常會回傳網頁伺服器預設的 404 頁面,很多網站也會自己客製化專屬的 404 頁面

參考文章


上一篇
Day 2 初探網路爬蟲
下一篇
Day 4 速成爬蟲的第二課 : 資料解析
系列文
mitmproxy 在網路爬蟲上的各種應用18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言