爬蟲實戰之模擬登陸Github
這裡不討論用 Github API 的情況,僅僅以 Github 來說明模擬登陸
先嚐試用真實瀏覽器登陸,登陸成功後在開發者工具的 Network 選項卡中捕獲 Session 檔案。可以看到,登陸所需要的資料不僅僅是 email(或使用者名稱) 和密碼,還需要其它的 3 個欄位,而這 3 個欄位普通使用者在真實瀏覽器中是無法填寫的(也無需填寫,這仨欄位會自動附加到表單中提交)。
其中的 commit、utf8 的值是不變的,只有 authenticity_token 欄位的值是每次登陸都不一樣的(為的就是區分人類與爬蟲程式),authenticity_token 欄位是在
下圖展示了(重新)登陸頁面的原始碼,其中 type 屬性為 hidden 的 input 欄位中的 authenticity_token 屬性的值就是需要提取出來作為表單資料的一部分提交至伺服器
從下圖可以看到響應碼(Status Code)是 302 found 表示重定向跳轉至其它 url,這裡跳轉至 https://github.com,也就是說,登陸成功後就跳轉至 Github 首頁(即個人主頁)
雖然是在 https://github.com/login 頁面中登陸,但登陸時是向 https://github.com/session 提交表單資料,所以在 session 響應中可惜檢視到已提交的表單資料。
上圖展示了登陸成功後,已提交的表單資料,可以發現 authenticity_token 欄位的值和登陸前的值是一致的(email、password 欄位由於是明文,所以這裡打碼了)
能保持登陸狀態的原因是登陸成功後生成 Cookies 的功勞,不過 Cookies 一般不是永久有效的,如果希望長期處於登陸狀態,需要每隔一段時間檢測下 Cookies 是否還有效(或進行異常處理),失效的話就需要重新提交表單生成新的 Cookies。