30行代碼獲取教務網成績並存入Excel
「覬覦」教務網不是一天兩天了。。
之前試過selenium,結果失敗。
昨天爬下來了,發現竟如此簡單!整個過程僅花核心代碼30餘行。(對了,沒有教務網的盆友看看思路吧~)
一、步驟
1、首先查看分析
打開頁面是這樣
查看源碼是這樣什麼都沒有,難怪用selenium定位不到了。估計還得配合PhantomJS來渲染頁面,麻煩呀。於是想到抓包,一下就抓出來了。
2、抓包
抓包過程就不贅述,詳情也可見我上一篇文章最終獲得成績的真實URL地址。
3、下載數據
最先是試著不登錄,直接用requests獲取抓包得到的URL,結果獲得這一串當時嚇壞了我這個小白.。上網查有說什麼「空指針錯誤」的,狐疑。後面設置headers,加上cookies,還開啟Session,稀里糊塗通過。當時是想著抓包得到的URL可能是臨時觸發的,所以必須保持在一個會話中。
後面用network分析了下,果然如此,而且session會話只停留一定的時間。
由此類推,先得打開成績查詢,才能觸發前面這個包,然後觸發我們要的包。
所以,還是得模擬登陸。4、數據處理與保存
這裡選擇存入Excel。看到一排排整齊的<td align="center">,於是用BeautifulSoup,text方法獲取文本,所有的數據放入list中,完美。數了下每一行有:課程號、課序號、課程名、英文名、學分、屬性、分數共7項。
可這是一個大的list呀,
如何將數據「規整地」存入Excel?// 嘿嘿,放點小招 //~~
data_list=[]nfor data in content:n data_list.append(data.text.strip())n new_list=[data_list[i:i+7] for i in range(0,len(data_list),7)]n
成功list中分割list,每一個list正好是7項。
黑魔法的味道?哈哈哈我簡直聰明(^_^)!
(當然不會告訴你是在stackoverflow上找到的)有了這裡鋪墊,存入數據就簡單了。二、結果
如下所示
看了一下,從入學到現在,一共考了73科。
一不小心暴露學渣的本質。。。。。三、代碼
這個小項目我放在Github上了:
https://github.com/LUCY78765580/Python-web-scraping/blob/master/JWCJ.py(如果您覺得不錯,也可以star我喲~^_^)
唉,還是放完整版,方便查看:
#!/usr/bin/env pythonn# -*-coding:utf-8 -*-n__author__=WYYn__date__=2017.03.26nn#實戰小項目:爬取教務網成績並存入excelnimport requestsnimport xlwtnfrom bs4 import BeautifulSoupnn#模擬登錄nformData={zjh:xxxxxxxxxxxxx,mm:xxxxxx}ns=requests.Session()nPost=s.post(url=http://zhjw.scu.edu.cn/loginAction.do,data=formData)nprint Post.status_codenn#獲取基本信息ndetailURL=http://zhjw.scu.edu.cn/gradeLnAllAction.do? type=ln&oper=qbinfo&lnxndm=2016-2017%D1%A7%C4%EA%C7%EF(%C1%BD%D1%A7%C6%DA)nhtml=s.get(url=detailURL)nmain=html.content.decode(gbk)nsoup=BeautifulSoup(main,lxml)ncontent=soup.find_all(td,align="center")nn#將信息放入一個list中,創建new_list(方便後續存入excel)ndata_list=[]nfor data in content:n data_list.append(data.text.strip())nnew_list=[data_list[i:i+7] for i in range(0,len(data_list),7)]nn#數據存入excel表格nbook=xlwt.Workbook()nsheet1=book.add_sheet(sheet1,cell_overwrite_ok=True)nheads=[u課程號,u課序號,u課程名,u英文課程名,u學分,u課程屬性,u成績]nprint un準備將數據存入表格...nii=0nfor head in heads:n sheet1.write(0,ii,head)n ii+=1ni=1nfor list in new_list:n j=0n for data in list:n sheet1.write(i,j,data)n j+=1n i+=1nbook.save(JiaoWuChengJi.xls)nprint un錄入成功!n
四、總結
總結這次爬蟲的關鍵:
1、巧用抓包,找到成績真實URL2、模擬登錄,並用Session保持會話3、使用xlwt將數據寫入excel4、實用小技巧:new_list=[data_list[i:i+n] for i in range(0,len(data_list),n)]最後這一項,簡直堪稱神奇的語法糖⊙ω⊙
本篇就是這樣啦~推薦閱讀:
※電影《戰狼2》的可視化分析
※爬取Ajax動態載入和翻頁時url不變的網頁
※圖中黃黑相間的是什麼品種的蜘蛛?
※有哪些網站用爬蟲爬取能得到很有價值的數據?
※開啟知乎收藏夾看圖模式