美文网首页
python使用request和bs4完成电子科大信息门户登录

python使用request和bs4完成电子科大信息门户登录

作者: 一袋歌手 | 来源:发表于2018-06-22 15:40 被阅读0次

大二的时候刚开始学的时候写的爬虫,突然翻出来再看的时候都忘了,于是心血来潮打算记下来:)

使用的库也比较基础,request和Beautifulsoup,python 3

基本的bs4语法文章中没有讲到,request略微提及,这个比较简单,用的都是基础的,自学很快就能学会。

第一步:具体思路

首先,我们需要有模拟自己登陆把用户名和密码提交给网页后台,一般来说提交的内容可以是一个字典形式,也可以是json形式的。这时候我们需要借助抓包软件来获取——到底需要上传一个什么形式的字典,内容除了用户名和密码还需要别的吗?

电子科大信息门户首页

如图是电子科大信息门户首页,输入用户名和密码才能登陆成功,我们知道request库里面有一个post的方法,用来提交表单数据(网页交互其实就是post数据和get数据的过程)然后学校服务器认证成功就登陆完成了。


其次,我们在登录成功后就需要找到一个有我们需要数据的网址,例如我想爬取自己的所有学年的成绩清单,http://eams.uestc.edu.cn/eams/teach/grade/course/person!historyCourseGrade.action对应的是电子科大的所有成绩网址(成绩不好隐藏一下=。=)

该网址显示的内容

至此就只剩下爬取相应内容了

第二步:实现过程

真正动手操作起来才能发现许多潜在的问题

首先我们需要知道上传的表单是什么样的,这里提供两种方法,去年自己用fiddler查看的,今年突然发现chorme自带也可以。

1.fidder

fiddler抓取的报文

第二种方法:chrome浏览器自带

按下f12键弹出chrome的开发者模式,点击上面标题栏的Network,然后先模拟登录一遍

注意看这个login页面对应的下面有个form Data(表单数据),里面其实就是我们提交给网页后天的信息。

通过多次比对发现除了用户名username和密码password,lt每一次登录都在变化,而剩下的值都是固定不变的。

通过搜索lt,我发现了这个数据的具体含义,lt可以理解成每个需要登录的用户都有一个流水号。只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程。否则,没有流水号的情况下,webflow会认为用户还没有进入webflow流程,从而会重新进入一次webflow流程,从而会重新出现登录界面。因此我们需要想办法保存登陆成功的cookie以便下次使用仍然能进入系统。

request.session()可以让同一个实例发出的请求具有相同的cookie。

操作过程:

1.准备好登录网址和成绩爬取网址

2.获取lt和准备上传的表单数据

我们在登录网址页面f12,crtl+f 搜索lt,发现lt对应在<input>中的value里面

用户名和密码填自己的即可

完成登录部分

至此我们可以先print输出一下

登陆成功

登陆成功,以及出现了笔者的名字。。源代码等同于这个登陆成功的页面

接下来直接登录那个爬取成绩的页面就行了。但是出现了一个问题。电子科大学校的网站经常会有这种情况,就是如果多方登录,就会有个弹窗页面显示重复登录,这时候经测试发现f5刷新页面即可。

但是webdriver可以模拟操作,request库最简单的方法就是重新get一遍该页面。【get两次】

get两次

现在已经成功进入成绩页面了,同样f12查看源代码,这里有个简单操作:同时按住ctrl+shift+c,然后鼠标放在你想要查询的元素位置那,网页会自动帮你定位到源代码的位置

我们发现所有的单科成绩都在table标签的tbody【页面id为grid18648965881_data】中。获取并print

爬取结果如下图所示,成功了嘻嘻

最后附上源代码

相关文章

网友评论

      本文标题:python使用request和bs4完成电子科大信息门户登录

      本文链接:https://www.haomeiwen.com/subject/mxpkyftx.html