因为最近在学习python3网络爬虫,想自己写一些小程序来实战一下。爬的是URP教务网。
一开始的思路是利用beautiful模块来进行爬取相关的html信息,直接来得到需要的信息。结果发现程序运行不通…
后来查了一下,发现用re模块好啊…配合python正则表达式那是相当简单…
下面开始分析,代码编写阶段。
分析
学习模拟登陆
这是第一步,有两种简单的方法,可直接参考的链接:参考链接在此
一种是查看抓的包中的:
代码:
|
|
不懂可查看文档:
requests文档
第二种是查看包中的cookie信息:
对应的实现模拟代码:
|
|
相关的信息我用x换掉了。不懂的朋友可以看文档,查资料咯。再次说明一下,URL部分**可以是登陆界面的,也可以是登陆之后的URL,经过测试两者均可。**
分析网页
到了分析阶段了。
打开我的Chrome浏览器,开始分析每个链接的html信息,看看有没有我想要的信息。
根据下面的操作得到了本学期的成绩查询的相关的超链接。
再结合下面两张图的分析易知:本学期成绩查询的超链接为:http://60.219.165.24//bxqcjcxAction.do
超链接部分。
主URL部分。
为了保证准确性,再向某成绩采取相应的操作(如下图所示),再往上看看,就发现它是本学期成绩查询的一部分。
接下来就是编写代码了,以上若是有不懂的地方,还需要利用搜索引擎多多查询哟。
测试代码部分
编写测试代码,爬取网页html信息:
|
|
运行查看效果:
成功得到了想要的html信息,接下来利用正则表达式选想要的部分即可。在这里要说明一下,不可用ForDate的那个模拟登陆,经过测试发现返回的是错误信息…所以以后老老实实用cookie模拟更为靠谱一点…
完整代码部分
|
|
关于正则表达式的解说可结合python正则表达式此篇文章学习。
简单解说一下,先贴出来html信息是怎么样的。
只截取了一部分,可自行了解。
解说:
.? 是一个固定的搭配,.和代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配,也就是我们会尽可能短地做匹配,以后我们还会大量用到 .*? 的搭配。
(.?)代表一个分组,在这个正则表达式中我们匹配了两个分组,在后面的遍历grades中,grade[0]就代表第一个(.?)所指代的内容,grade[1]就代表第二个(.*?)所指代的内容,以此类推。
re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符。
最后
- 参考文章列表:
还有一些文档,均可在官网上看到,利用搜索引擎即可。