
例行圖片^^(感謝畫師)
前言
最近一直在整理以前寫的一些程序,突然發(fā)現(xiàn)了一個以前學(xué)爬蟲時寫的爬教務(wù)處的程序,感覺還蠻有意思的,雖然沒什么干貨,還是分享出來看看。
正文
依賴庫
- requests
- time
- pandas
- bs4
- csv
實現(xiàn)功能
- 模擬登陸教務(wù)系統(tǒng)
- 找到存取成績的頁面
- 爬取成績并存取為csv文件
程序?qū)崿F(xiàn)
說明:
由于此程序重點在于模擬登陸的進(jìn)行,同時在模擬登陸后獲取的信息各自有不同,因此爬蟲部分自行理解。本人只抓取了本學(xué)期的成績。
模擬登陸
首先分析網(wǎng)頁,應(yīng)提取的信息如下

image

image
由上圖我們可以從網(wǎng)頁中使用bs4庫解析這些信息,但如果這些信息的話,肯定會失敗的。這是為什么呢?這里確實也是個坑,經(jīng)過我網(wǎng)上查閱了一些資料,最后才發(fā)現(xiàn)原來是少提交了一個信息了。如下圖:

image
'-'這個參數(shù)是關(guān)于時間的參數(shù),我們可以用time庫來模擬它
這時候我們終于可以進(jìn)行模擬登陸了^^
def get_postinf():
# 獲取xsrf code
response = session.get('http://idas.uestc.edu.cn/authserver/login', headers=header)
soup = BeautifulSoup(response.text, 'lxml')
a= soup.find('input', {'name':"lt"}).attrs['value']
b= soup.find('input', {'name':"dllt"}).attrs['value']
c = soup.find('input', {'name':"execution"}).attrs['value']
d = soup.find('input', {'name':"_eventId"}).attrs['value']
e = soup.find('input', {'name':"rmShown"}).attrs['value']
return(a,b,c,d,e)
def jiaowu_login(account, password):
post_url = 'http://idas.uestc.edu.cn/authserver/login'
post_data = {
'username': account,
'password': password,
'lt': pa,
'dllt': pb,
'execution': pc,
'_eventId': pd,
'rmShown': pe,
}
para={
'username': account,
'_':str(time.time() * 1000)
}
base_url='http://idas.uestc.edu.cn/authserver/needCaptcha.html'
session.get(base_url,params=para)
response_text = session.post(post_url, data=post_data, headers=header)
爬蟲部分
剩下的就是尋找到個人需要提取的網(wǎng)頁信息進(jìn)行提取了,我以我本學(xué)期的所有成績提取為例:
def grade_get():
response = session.get('http://eams.uestc.edu.cn/eams/teach/grade/course/person!search.action?semesterId=163&projectType=1')
soup = BeautifulSoup(response.text, 'lxml')
biaotis = soup.find('tr').find_all('th')
columns=[]
column=[]
for biaoti in biaotis:
column.append(biaoti.string)
columns.append(column)
datas=soup.find("tbody").find_all("tr")
for data in datas:
row=[]
singles=data.find_all("td")
for single in singles:
row.append(single.get_text())
columns.append(row)
csvFile = open("mygrade.csv", "w")
writer = csv.writer(csvFile)
# 寫入的內(nèi)容都是以列表的形式傳入函數(shù)
for col in columns:
writer.writerow(col)
csvFile.close()
print("快去查看你的成績吧")
將以上兩個過程聯(lián)系起來
if __name__ == '__main__':
agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36'
header = {
'Host': 'idas.uestc.edu.cn',
'Referer': 'http://idas.uestc.edu.cn/authserver/login',
'User-agent': agent,
}
session = requests.session()
pa, pb, pc, pd, pe = get_postinf()
name=input("你的學(xué)號")
password=input("你的密碼")
jiaowu_login(name,password)
grade_get()
結(jié)果展示
以我獲取到的成績?yōu)槔?,使用excel打開,可以獲得如下信息

image