Android爬去教务系统的新闻,模拟登陆uestc教务系统并爬取成绩

f5c0dd7eb73e

例行图片^^(感谢画师)

前言

最近一直在整理以前写的一些程序,突然发现了一个以前学爬虫时写的爬教务处的程序,感觉还蛮有意思的,虽然没什么干货,还是分享出来看看。

正文

依赖库

requests

time

pandas

bs4

csv

实现功能

模拟登陆教务系统

找到存取成绩的页面

爬取成绩并存取为csv文件

程序实现

说明:

由于此程序重点在于模拟登陆的进行,同时在模拟登陆后获取的信息各自有不同,因此爬虫部分自行理解。本人只抓取了本学期的成绩。

模拟登陆

首先分析网页,应提取的信息如下

f5c0dd7eb73e

image

f5c0dd7eb73e

image

由上图我们可以从网页中使用bs4库解析这些信息,但如果这些信息的话,肯定会失败的。这是为什么呢?这里确实也是个坑,经过我网上查阅了一些资料,最后才发现原来是少提交了一个信息了。如下图:

f5c0dd7eb73e

image

'-'这个参数是关于时间的参数,我们可以用time库来模拟它

这时候我们终于可以进行模拟登陆了^^

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)

爬虫部分

剩下的就是寻找到个人需要提取的网页信息进行提取了,我以我本学期的所有成绩提取为例:

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)

# 写入的内容都是以列表的形式传入函数

for col in columns:

writer.writerow(col)

csvFile.close()

print("快去查看你的成绩吧")

将以上两个过程联系起来

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("你的学号")

password=input("你的密码")

jiaowu_login(name,password)

grade_get()

结果展示

以我获取到的成绩为例,使用excel打开,可以获得如下信息

f5c0dd7eb73e

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值