python爬虫-60行代码实现爬取教务处成绩

爬成绩的想法由来已久,寒假在家就动手操作了一下。我们学校的教务处登录是不需要验证码的,所以爬这个也相对简单些。写好后又用面向对象方法重新调整了代码,更美观也更符合python简洁优美的风格。

本文最后附上源代码和所用库的官方文档,方便大家学习。

所用到的库有requests, beautifulsoup和csv三个。

首先我们看登录页面:
登录页面只需要用户名和密码两个信息。

在网页端登录后查看页面信息:
相关信息打码我们选中post方法那个页面,那就是提交登录信息后的页面,状态显示为302,意思是重定向,要跳转到另一个页面。

在参数一栏里看见所需的表单信息名字分别为username和password。

所以在使用requests的post方法时,注意要提交一个字典格式的data

#用户登录
login_url = 'http://newjw.lixin.edu.cn/sso/login'
header = {
   'User-Agent':'Mozilla/5.0 (Windows NT 10.0;) Gecko/20100101 Firefox/64.0'}
payload = {
   'username':username,'password':password}
login1 = s.post(login_url,data=payload,headers = header)    

细心的话可以注意到,我这里post前面不是requests,而是s

因为教务系统需要使用cookies,而cookies到后面的页面中还需要用到,所以普通的requests.post()用法在这里不适用。需要用到requests库的高级用法:session会话

在session会话中可以保存并一直携带相同的cookies,我这里s的定义如下:

s = requests.Session()

在登录时还需注意的一点是请求头hearders的设置。

不知道有没有小伙伴的电脑跟我一样,我用的是火狐Quantum64,在页面信息中可以看到我完整地user-agent是这样:

看红框框出的部分
括号里面有个…,在设置进requests的headers参数时,这个三个小点点要删掉,不然会出现什么latin -1的报错,具体我忘了。

第一步的登录到这里就完成了,接下来我们来到成绩页面,获取成绩页面的相关信息。

我成绩不太好就不献丑了,老师们也打了码,避免泄露个人信息。

成绩页面

拿到score_url ,结合上面我说过的,访问成绩页面也需要携带cookies,所以还是一样,用session。这里不需要重新定义一个session,因为这样相当于重新开了一个会话,我们需要和前面的登录在同一个会话里,所以看下面:

#成绩页面
my_score_url = 'http://newjw.lixin.edu.cn/webapp/std/edu/grade/course.action'   
#下载成绩页面源代码
my_score_url_text = s.get(my_score_url).text

直接使用s.get()就可以了。

到这里requests库的使用基本放下了,页面源代码已经下载下来,接下来该对源代码进行结构化处理。请出我们的beautifulsoup打法,漂亮的肥皂???为啥叫这名儿我也不知道,可能这样清洗数据比较干净?我猜的哈。

beautifulsoup容易上手,学起来比正则表达式简单。当然,爬虫进阶是少不了正则的了,毕竟它更加精确

my_score_soup = BeautifulSoup(my_score_url_text,'html.parser')

首先看看我们所需要的数据在哪里,这里我需要爬取的是第一个表格2018-2019年 1 学期成绩列表。页面元素审查,找到数据位置。

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值