“覬覦”教務(wù)網(wǎng)不是一天兩天了疆股。。
之前試過selenium倒槐,結(jié)果失敗旬痹。
昨天爬下來了,發(fā)現(xiàn)竟如此簡單!
整個過程僅花核心代碼30余行。
一击碗、步驟
1、首先查看分析
什么都沒有人弓,難怪用selenium定位不到了。估計還得配合PhantomJS來渲染頁面着逐,麻煩呀崔赌。于是想到抓包,一下就抓出來了耸别。
2健芭、抓包
抓包過程就不贅述,詳情也可見我上一篇文章
http://www.reibang.com/p/1f44a9a2ddd8
最終獲得成績的真實URL地址秀姐。
3慈迈、下載數(shù)據(jù)
最先是試著不登錄,直接用requests獲取抓包得到的URL省有,結(jié)果獲得這一串
當(dāng)時嚇壞了我這個小白.痒留。
上網(wǎng)查有說什么“空指針錯誤”的谴麦,狐疑。
后面設(shè)置headers,加上cookies伸头,還開啟Session匾效,稀里糊涂通過。
當(dāng)時是想著抓包得到的URL可能是臨時觸發(fā)的恤磷,所以必須保持在一個會話中弧轧。
后面用network分析了下,果然如此碗殷,而且session會話只停留一定的時間。
由此類推速缨,先得打開成績查詢锌妻,才能觸發(fā)前面這個包,然后觸發(fā)我們要的包旬牲。
所以仿粹,還是得模擬登陸。
4原茅、數(shù)據(jù)處理與保存
這里選擇存入Excel吭历。
看到一排排整齊的<td align="center">,于是用BeautifulSoup擂橘,text方法獲取文本晌区,所有的數(shù)據(jù)放入list中,簡直完美通贞。
數(shù)了下每一行有:課程號朗若、課序號、課程名昌罩、英文名哭懈、學(xué)分、屬性茎用、分?jǐn)?shù)共7項遣总。
可這是一個大的list呀,
如何將數(shù)據(jù)“規(guī)整地”存入Excel轨功?
// 嘿嘿旭斥,放點小招 //~~
data_list=[]
for data in content:
data_list.append(data.text.strip())
new_list=[data_list[i:i+7] for i in range(0,len(data_list),7)]
成功list中分割list,每一個list正好是7項古涧。
黑魔法的味道琉预?哈哈哈我簡直聰明(_)!
(當(dāng)然不會告訴你是在stackoverflow上找到的)
有了這里鋪墊,存入數(shù)據(jù)就簡單了蒿褂。
</br>
二圆米、結(jié)果
如下所示
看了一下卒暂,從入學(xué)到現(xiàn)在,一共考了73科娄帖。
一不小心暴露學(xué)渣的本質(zhì)也祠。。近速。诈嘿。。
三削葱、代碼
還是放完整版奖亚,方便查看:
# !usr/bin/env python
# -*-coding:utf-8 -*-
__author__='WYY'
__date__='2017.03.26'
#實戰(zhàn)小項目:爬取教務(wù)網(wǎng)成績并存入excel
import requests
import xlwt
from bs4 import BeautifulSoup
#模擬登錄
formData={'zjh':'xxxxxxxxxxxxx','mm':'xxxxxx'}
s=requests.Session()
Post=s.post(url='http://zhjw.scu.edu.cn/loginAction.do',data=formData)
print Post.status_code
#獲取基本信息
detailURL='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)'
html=s.get(url=detailURL)
main=html.content.decode('gbk')
soup=BeautifulSoup(main,'lxml')
content=soup.find_all('td',align="center")
#將信息放入一個list中,創(chuàng)建new_list(方便后續(xù)存入excel)
data_list=[]
for data in content:
data_list.append(data.text.strip())
new_list=[data_list[i:i+7] for i in range(0,len(data_list),7)]
#數(shù)據(jù)存入excel表格
book=xlwt.Workbook()
sheet1=book.add_sheet('sheet1',cell_overwrite_ok=True)
heads=[u'課程號',u'課序號',u'課程名',u'英文課程名',u'學(xué)分',u'課程屬性',u'成績']
print u'\n準(zhǔn)備將數(shù)據(jù)存入表格...'
ii=0
for head in heads:
sheet1.write(0,ii,head)
ii+=1
i=1
for list in new_list:
j=0
for data in list:
sheet1.write(i,j,data)
j+=1
i+=1
book.save('JiaoWuChengJi.xls')
print u'\n錄入成功!'
也可看Github:
https://github.com/LUCY78765580/Python-web-scraping/blob/master/JWCJ.py
</br>
四析砸、總結(jié)
總結(jié)這次爬蟲的關(guān)鍵:
1昔字、巧用抓包,找到成績真實URL
2首繁、模擬登錄作郭,并用Session保持會話
3、使用xlwt將數(shù)據(jù)寫入excel
4弦疮、實用小技巧:new_list=[data_list[i:i+n] for i in range(0,len(data_list),n)]
最后這一項夹攒,簡直堪稱神奇的語法糖⊙ω⊙
本篇就是這樣啦~