python爬取学校教务管理系统_python爬虫模拟登陆学校教务处
最近在学python爬虫,我想教务处官网可能是每个学生第一个自己动手爬取的网站吧。而且很多学校的教务处没有验证码,很适合初学者练手。
环境准备
本次模拟登陆用到的库除了requests外还有lxml,我们用它来提取网页中隐藏的一些关于登陆的信息,登陆成功后也可以方便地用它来获取我们想要的内容。
使用开发者工具分析登陆过程
我们进入登陆界面,打开开发者工具,勾选preserve log,这表示持续显示请求过程。打开network,可以看到所有请求过程。
输入密码后登陆,点击network中的第一个请求,这个url就是我们数据实际上传的地址,暂时称其为请求地址:
随后我们开始获取模拟登陆所必须的data和headers,headers即为上图右侧的Request Headers,我们只需要其中的Host,Referer和User-Agent。
然后查看下方的Form Data,如下图所示
Form Data中的数据就是我们要向请求网址上传的数据,可以看出,除了用户名和密码外,还有一些要上传。其中rmshown,_eventld.dllt是不变的常量,我们实际上不知道的只有lt和execution,我们退出登录后再进入登陆界面,点击检查,ctrl+F 搜索可以查到这两个值,如下图:
这样我们就得到了模拟登陆需要的所有信息。
代码实战
我们定义一个Login类来实现登陆过程,现在,我们要设置一下登陆网址,请求网址,以及目标网址(比如你想获取你的成绩,该地址就是你的成绩页面)。
class Login(object):
def __init__(self):
self.login_url = '登陆页面'
self.post_url = '请求网址'
self.logined_url = '目标网址'
self.session = requests.Session()
我们还调用了requests库中的Session,它可以帮我们维持一个会话,这样我们的cookie问题就解决了。
要得到lt,eventld,我们前面提到的lxml就派上用场了,我们根据它的xpath方法提取两个值并将其返回,将其定义在token方法中。
def get_token(self):
response = self.session.get(self.login_url, headers=self.headers)
selector = etree.HTML(response.text)
lt = selector.xpath('//div//input[1]/@value')[2]
execution = selector.xpath('//div//input[3]/@value')[0]
return (execution,lt)
接下来定义login方法,将所需要的数据存放到post_data方法中,上传到请求网址,并获取我们需要的在目标网址中的数据。
def login(self,username,password):
(execution,lt) = self.get_token()
print(execution,lt)
post_data = {
'_eventId':'submit',
'rmShown': '1',
'lt':lt,
'username': username,
'password': password,
'dllt': 'userNamePasswordLogin',
'execution': 'e1s1',
}
response = self.session.post(self.post_url,data=post_data,headers = self.headers)
if response.status_code == 200:
print('post成功')
# print(response.text)
response = self.session.get(self.logined_url,headers = self.headers)
print(response.status_code)
if response.status_code == 200:
print('获取信息成功')
504错误解决
随后在主函数中运行:
if __name__ == "__main__":
login = Login()
login.login(username='xxxxxx', password='xxxxxx')
运行后结果如下:
可以看出,我们请求界面已经成功,证明我们已经成功登陆,然而却不能访问目标地址,这里耽误了很长时间,最后发现是因为目标地址的headers和请求地址的不同,导致访问失败。我们重新定义目标地址的headers
重新运行
返回两个页面的状态码都为200,证明我们本次模拟登陆实验成功。
后记
本文未设计的验证码登陆我将会在后面的文章中补充。
如果本文对您有所帮助或启发,记得点赞哦。
python爬取学校教务管理系统_python爬虫模拟登陆学校教务处相关推荐
- python爬取学校教务管理系统_python requests模拟登陆正方教务管理系统,并爬取成绩...
最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=req ...
- python爬取数据的原理_Python爬虫原理
前言 简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML.JS.CSS代码返回给浏览器,这些代码经过浏览器解析.渲染,将丰富多彩的网页呈现我们眼前: 一.爬虫是什 ...
- python爬取虎扑评论_python爬虫系列Selenium定向爬取虎扑篮球图片详解
前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...
- python爬取新闻后提炼_Python爬虫开发的3大难题,别上了贼船才发现,水有多深...
写爬虫,是一个非常考验综合实力的活儿.有时候,你轻而易举地就抓取到了想要的数据:有时候,你费尽心思却毫无所获. 好多Python爬虫的入门教程都是一行代码就把你骗上了"贼船",等上 ...
- python爬取网页数据软件_python爬虫入门10分钟爬取一个网站
一.基础入门 1.1什么是爬虫 爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序. 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HT ...
- python爬取多页数据_python爬虫实现爬取同一个网站的多页数据代码实例
本篇文章小编给大家分享一下python爬虫实现爬取同一个网站的多页数据代码实例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 一.爬虫的目的 从网上获 ...
- python爬取网上租房信息_Python爬虫入门 | 5 爬取小猪短租租房信息
小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 1.爬取租房标题 按照惯例,先来爬下标题试试水,找到标题,复制xpath. 多复制几个房屋 ...
- python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法
爬取的站点:http://beijing.8684.cn/ (1)环境配置,直接上代码: # -*- coding: utf-8 -*- import requests ##导入requests fr ...
- python爬取豆瓣电影信息_Python爬虫入门 | 爬取豆瓣电影信息
这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...
最新文章
- Oracle 11g新特性之--虚拟列(Virtual Column)
- 世界最成功的僵尸网络使用Fast Flux技术躲避检测
- webrtc rtsp播放
- 进程间通信(5) 命名管道
- java区分不同的excel_Java处理excel两种不同的方式
- 计算机教学辅助在教学中的应用研究,云计算辅助教学在高职计算机教学中的应用研究.doc...
- 计算机图形学的核心领域,计算机图形学基础知识重点整理.pdf
- 车用TVS管 SM8S系列 国产替代
- dbgrideh的功能
- linuxweb集群mysql_企业web高可用集群实战之lvs+keepalived+mysql
- apiCloud中aui获取不到高度,pos.h为0,offsetHeight为0问题
- python实现打飞机小游戏
- NLP——12.词向量及相关应用
- python——设置渐变色
- TDD、FDD是什么意思?
- 贪心算法-会议安排问题
- StartUml 用例图
- SpringBoot Mybatis Starter 解析
- 计算机二级演示文稿合并PPT,[PPT考点]如何将两个幻灯片合并在一个幻灯片?
- 【天梯赛】L2-039 清点代码库** (25 point(s))
热门文章
- Android无障碍设计简介
- Cocos creator(JavaScript)- 简单实现连线小游戏
- Pairwise Body-Part Attention for Recognizing HOI(面向HOI识别的成对身体部位注意力机制)
- 微信网页版传输助手上线
- jupyter中配置多种虚拟环境
- 【LeetCode】1710.卡车上的最大单元数
- python找零钱问题_动态规划法(二)找零钱问题
- python面向对象思想汇报_思想汇报(二)——有关测试
- 【笔记】三张图读懂机器学习:基本概念、五大流派与九种常见算法
- mysql表如何删除一条数据_mysql如何删除表中一行数据?