前言
最近一直在整理以前写的一些程序,突然发现了一个以前学爬虫时写的爬教务处的程序,感觉还蛮有意思的,虽然没什么干货,还是分享出来看看。
正文
依赖库
- requests
- time
- pandas
- bs4
- csv
实现功能
- 模拟登陆教务系统
- 找到存取成绩的页面
- 爬取成绩并存取为csv文件
程序实现
说明:
由于此程序重点在于模拟登陆的进行,同时在模拟登陆后获取的信息各自有不同,因此爬虫部分自行理解。本人只抓取了本学期的成绩。
模拟登陆
首先分析网页,应提取的信息如下
由上图我们可以从网页中使用bs4库解析这些信息,但如果这些信息的话,肯定会失败的。这是为什么呢?这里确实也是个坑,经过我网上查阅了一些资料,最后才发现原来是少提交了一个信息了。如下图:
'-'这个参数是关于时间的参数,我们可以用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打开,可以获得如下信息