模擬登陸uestc教務(wù)系統(tǒng)并爬取成績

例行圖片^^(感謝畫師)

github地址:https://github.com/haoxinl/spider_python

博客地址:http://haoxinl.club/2018/02/18/uestc-login-in/

前言

最近一直在整理以前寫的一些程序,突然發(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容