Python爬取蘭州大學教務在線數據
我所在的蘭州大學無論是查考試成績、課程表,還是評估課程什麼的都只能通過瀏覽器訪問蘭州大學教務處這個網頁,再輸入賬號、密碼、驗證碼登錄,沒有免驗證碼的登陸方法,也沒有手機客戶端。於是我就想著能不能用Python做到自動化。另外,用的是清華大學教育研究所開發的教務系統,而不是正方的。
在網上看了很多其他學校的同學的作品,也進行了一些參考,下面直接貼代碼。
其實到最後我也沒成功,現在的問題就是沒辦法登陸進去。不過大的框架應該還是沒問題的吧,如果有高人看到麻煩指點一下,如果是我這邊的問題我還能改一下,如果是教務系統的問題那我也無能為力了。
#coding=utf-8nimport urllibnimport http.cookiejarnimport osnimport renimport sysnfrom io import BytesIOnfrom PIL import Imagenfrom selenium import webdrivernfrom selenium.webdriver.common.keys import Keysnncookie = http.cookiejar.CookieJar() nopener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))nopener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))nopener.addheaders.append((User-Agent,Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36)) nopener.addheaders.append((Connection,Keep-Alive))nopener.addheaders.append((Accept,text/html, */*; q=0.01))nopener.addheaders.append((Accept-Encoding,gzip, deflate))nopener.addheaders.append((Accept-Language,zh,zh-CN;q=0.8,en;q=0.6))nopener.addheaders.append((Content-Length,0))nopener.addheaders.append((Cookie,JSESSIONID=A48FB5EEAF6E9371A4A3632397E0C240.TA1))nopener.addheaders.append((DNT,1))nopener.addheaders.append((Host,jwk.lzu.edu.cn))nopener.addheaders.append((Origin,http://jwk.lzu.edu.cn))nopener.addheaders.append((Referer,http://jwk.lzu.edu.cn/academic/calendarinfo/viewCalendarInfo.do))nopener.addheaders.append((X-Requested-With,XMLHttpRequest))nnopener.open(urllib.request.Request(http://jwk.lzu.edu.cn/academic/common/security/login.jsp)) n nimgurl = http://jwk.lzu.edu.cn/academic/getCaptcha.do nuserid = "****" npwd = "****" nres = opener.open(urllib.request.Request(imgurl)) ntempIm = BytesIO(res.read()) nim = Image.open(tempIm) nim.show() nyzm = input("yzm:")nnumber="%B5%C7%C2%BC"npostdata = urllib.parse.urlencode({ n groupId:, n j_username:userid, n j_password:pwd, n j_captcha:yzm,n button1:number, n }).encode(encoding=UTF8) nreq = urllib.request.Request(n url = http://jwk.lzu.edu.cn/academic/j_acegi_security_check,n data = postdatan ) nopener.open(req) nn#content = urllib.request.urlopen(http://jwk.lzu.edu.cn/academic/manager/score/studentOwnScore.do?groupId=&moduleId=2020).read()n#print(content.decode(UTF-8))nndriver = webdriver.PhantomJS(executable_path="C:UsersquzchAppDataLocalProgramsPythonPython35Scriptsphantomjs.exe") nurl="http://jwk.lzu.edu.cn/academic/manager/score/studentOwnScore.do?groupId=&moduleId=2020"ndriver.get(url)ndata = driver.page_sourcenprint(data)n
中間一度以為之所以抓取的網頁源碼不全是因為網頁上的js沒有運行,還特意用了selenium和PhantomJS,不過都沒用。我還是覺得是因為沒有成功登錄的原因。
就這樣吧,論技術我肯定是比不過99%的計算機專業的同學的,不過重在互相學習嘛。
要是想看每天更新的好文章,可以去我另一個網站,青蔥:http://www.caroju.ml
推薦閱讀:
※如何評價蘭州大學校長王乘?
※如何評價蘭州大學後市餐館的衛生狀況?
※如何看待「中國新聞周刊」的文章《蘭州大學:名校的焦慮》?
※蘭州大學的焦慮:教師流失影響持續,多項指標落後同類大學