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上了:

github.com/LUCY78765580

(如果您覺得不錯,也可以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、巧用抓包,找到成績真實URL

2、模擬登錄,並用Session保持會話

3、使用xlwt將數據寫入excel

4、實用小技巧:new_list=[data_list[i:i+n] for i in range(0,len(data_list),n)]

最後這一項,簡直堪稱神奇的語法糖⊙ω⊙

本篇就是這樣啦~

推薦閱讀:

電影《戰狼2》的可視化分析
爬取Ajax動態載入和翻頁時url不變的網頁
圖中黃黑相間的是什麼品種的蜘蛛?
有哪些網站用爬蟲爬取能得到很有價值的數據?
開啟知乎收藏夾看圖模式

TAG:爬虫 | Python | 自学编程 |