爬取的網址:http://jwxt.gdufe.edu.cn/jsxsd/
最近在研究python爬蟲,就拿了自己學校的一個相當于教務系統的東西?來模擬登陸了一下。網上查了一下資料,
教務系統好像通常都是爬蟲新手&學生的摯愛,因為登陸簡單不用驗證碼等等等。。
其實這個還是挺簡單的,但是我在分析HTTP的請求和響應的時候中了一個坑,所以搞了一天。。真是弱,好煩


先說說用到的python庫是urllib.request和http.cookiejar。模擬登陸需要使用cookie去保持登陸的狀態,若不懂就自行百度。
這里主要想聊一聊如何抓包和分析HTTP請求和響應的消息頭。
先看看這個系統的登陸界面:
我就直接登陸然后用360自帶的功能進行抓包,看看在登陸的時候模擬器和服務器之間干了些什么。登陸前按F12就可以了:

我們關注Network,里面顯示的是抓到的包。看名字第一個就是登陸相關的,點進去看看吧: 這里就是登陸的時候發送和收到的請求和響應消息,有了這些信息,我們就可以模擬瀏覽器去登陸系統了。
這里就是登陸的時候發送和收到的請求和響應消息,有了這些信息,我們就可以模擬瀏覽器去登陸系統了。
Request Headers:
請求的header在這里不重要,這個系統似乎也沒有任何手段去阻攔程序去訪問,有些網站就會根據User-Agent去識別你是否瀏覽器訪問。
python就可以根據這個參數偽裝成瀏覽器去訪問了。
Form Data:
這里就是登陸的時候需要提交的表單數據,這里只需要提交賬號和密碼
Response Headers:
這里是服務器響應的消息,Location是重定向的地址。表單提交后登陸成功就會轉到這個地址。
這里說說我踩到的坑,看看第一行的Request URL是表單提交請求的URL,也就是說,表單應該提交到這個網址,這里才是程序登陸的入口!!
而不是我一開始給的網址:http://jwxt.gdufe.edu.cn/jsxsd/;考慮一下程序的行為:把消息頭表單數據提交到這個網址,它并沒有表單處理的功能,
當然就登陸失敗了,雖然它還是會返回一個cookie給你,但是使用這個cookie并不能登陸。
下面是代碼:
from http import cookiejarfrom urllib import requestfrom urllib import parse#這個是提交表單的urlurl = 'http://jwxt.gdufe.edu.cn/jsxsd/xk/LoginToXkLdap'file = 'C:/Users/Administrator/Desktop/cookie.txt'post_data = parse.urlencode({	'USERNAME':'14251102221',	'PASSWord':'291608411'}).encode(encoding='utf8')header = {	'Referer':'http://jwxt.gdufe.edu.cn/jsxsd/',	'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'	}req = request.Request(url,post_data,header)#使用cookie創建自己的openercookie = cookiejar.CookieJar()handler = request.HTTPCookiePRocessor(cookie)opener = request.build_opener(handler)f = opener.open(req)#登陸成功后保存了cookie,然后就可以訪問登陸后的其他url了,這個是課程表的urlgradeURL = 'http://jwxt.gdufe.edu.cn/jsxsd/xskb/xskb_list.do'result = opener.open(gradeURL)f = open('C:/Users/Administrator/Desktop/1.html','wb')f.write(result.read())
新聞熱點
疑難解答