1. 程式人生 > >爬蟲實戰之模擬登陸Github

爬蟲實戰之模擬登陸Github

這裡不討論用 Github API 的情況,僅僅以 Github 來說明模擬登陸

先嚐試用真實瀏覽器登陸,登陸成功後在開發者工具的 Network 選項卡中捕獲 Session 檔案。可以看到,登陸所需要的資料不僅僅是 email(或使用者名稱) 和密碼,還需要其它的 3 個欄位,而這 3 個欄位普通使用者在真實瀏覽器中是無法填寫的(也無需填寫,這仨欄位會自動附加到表單中提交)。

a_1.gif

其中的 commit、utf8 的值是不變的,只有 authenticity_token 欄位的值是每次登陸都不一樣的(為的就是區分人類與爬蟲程式),authenticity_token 欄位是在 

https://github.com/login (登陸頁面,未登陸狀態)的 from 元素下的一個隱含欄位(不顯示在瀏覽器中),其 type 屬性值為 hidden

下圖展示了(重新)登陸頁面的原始碼,其中 type 屬性為 hidden 的 input 欄位中的 authenticity_token 屬性的值就是需要提取出來作為表單資料的一部分提交至伺服器

a_2.gif

從下圖可以看到響應碼(Status Code)是 302 found 表示重定向跳轉至其它 url,這裡跳轉至 https://github.com,也就是說,登陸成功後就跳轉至 Github 首頁(即個人主頁)

雖然是在 https://github.com/login 頁面中登陸,但登陸時是向 https://github.com/session 提交表單資料,所以在 session 響應中可惜檢視到已提交的表單資料。

gif5新檔案.gif

上圖展示了登陸成功後,已提交的表單資料,可以發現 authenticity_token 欄位的值和登陸前的值是一致的(email、password 欄位由於是明文,所以這裡打碼了)

能保持登陸狀態的原因是登陸成功後生成 Cookies 的功勞,不過 Cookies 一般不是永久有效的,如果希望長期處於登陸狀態,需要每隔一段時間檢測下 Cookies 是否還有效(或進行異常處理),失效的話就需要重新提交表單生成新的 Cookies。

程式碼實現