天天看點

python爬蟲——使用Cookie登入教務系統

爬蟲可作為一種用作資訊收集的腳本使用,在生活中多有涉及,根據任務的不同其編寫的難易程度自然不同,本篇将講述爬蟲常用的登入繞過方法,該方法實作較為簡單,目标網站就拿身邊比較常用的教務系統試試手吧😉

請合理合法使用網絡爬蟲!!!

環境依賴庫

  • requests

項目分析

  1. 确定目标
  2. 網站抓包
  3. 資料分析
  4. 腳本編寫

目标說明

使用爬蟲腳本成功登入教務系統,由于網站前後端分離各自負責不同工作,網站通常通過使用者Request請求中的Cookie進行身份識别,是以實作登入的最簡單方法就是在爬蟲通路時自建表頭Header,在表頭中添加已登入的Cookie即可繞過登入驗證,這次就先講解這個比較簡單的登入方法。

抓包分析

使用浏覽器打開開發者工具(F12),對教務系統登入頁面進行抓包可以抓取如下一些資料包,然而這些包對我們的目的而言作用不大,該頁面抓取的資料包目的在于加載、顯示登入頁面及加載相關操作腳本。

python爬蟲——使用Cookie登入教務系統

但在此次抓包中我們可以對Request Cookies進行簡單分析,可以看出此時僅存在一個名為JSESSIONID的Cookie資料,該Cookie在使用者通路系統時經背景伺服器建立,并将作為此次Session會話中的使用者身份辨別。在Session會話存活周期内JSESSIONID不會改變,一般情況下,若使用者在一定時間内未做任何操作,則此次Session會話結束,下次通路系統時,背景伺服器重新配置設定JSESSIONID,不排除背景伺服器設定了Session最大存活時長的可能。

python爬蟲——使用Cookie登入教務系統

由于此次我們使用已登入的Cookie繞過登入驗證,是以我們隻需要在正常登入後擷取該JSESSIONID,并将其加入到請求的表頭中即可實作繞過登入,因為該JESSIONID作為使用者辨別已經在浏覽器中被使用者操作登入,是以背景伺服器認定,在該Session存活周期内,該使用者已經過登入。

使用者在每次網絡請求時,JSESSIONID資料都會被存在Request Headers中,些許伺服器會通過該頭部資訊作出防爬政策,是以,我們編寫爬蟲在進行網絡請求時,也應帶着這些請求頭資訊。

python爬蟲——使用Cookie登入教務系統

腳本編寫

導入依賴包

導入前請使用

pip install requests

安裝requests庫

import requests
           
建立請求頭資訊

簡單粗暴,複制抓取的Headers資訊建構請求頭,在每次爬蟲進行網絡通路時都要帶着此資訊

headers = {
    'Accept': 'text/css,*/*;q=0.1',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'no-cache',
    'Cookie': 'JSESSIONID=xxxxxxxxxxx',
    'Host': 'xxxxxx',
    'Pragma': 'no-cache',
    'Proxy-Connection': 'keep-alive',
    'Referer': 'xxxxxxxxxxx',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
           
嘗試通路首頁

攜帶已登入的Cookie資訊通路系統首頁,若輸出内容為系統首頁的html資訊則操作成功,此次教程結束😎

說明

若未攜帶已登入的Cookie表頭,直接使用requests進行請求通路,則會跳轉至系統的登入頁面,此時輸出内容則會是登入頁面的html内容。

由于Session會話存在存活周期,是以使用該方法實際上僅可在一定時間内跳過登入,若Session會話被銷毀,則又需要進行登入、擷取JESSIONID等操作。是以,該方法并未真正實作登入跳過,但使用起來并不算雞肋。

下一篇将講解爬蟲正常登入操作,實作過程相比此篇要複雜一點。