最近在学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爬虫模拟登陆学校教务处相关推荐

  1. python爬取学校教务管理系统_python requests模拟登陆正方教务管理系统,并爬取成绩...

    最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=req ...

  2. python爬取数据的原理_Python爬虫原理

    前言 简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML.JS.CSS代码返回给浏览器,这些代码经过浏览器解析.渲染,将丰富多彩的网页呈现我们眼前: 一.爬虫是什 ...

  3. python爬取虎扑评论_python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...

  4. python爬取新闻后提炼_Python爬虫开发的3大难题,别上了贼船才发现,水有多深...

    写爬虫,是一个非常考验综合实力的活儿.有时候,你轻而易举地就抓取到了想要的数据:有时候,你费尽心思却毫无所获. 好多Python爬虫的入门教程都是一行代码就把你骗上了"贼船",等上 ...

  5. python爬取网页数据软件_python爬虫入门10分钟爬取一个网站

    一.基础入门 1.1什么是爬虫 爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序. 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HT ...

  6. python爬取多页数据_python爬虫实现爬取同一个网站的多页数据代码实例

    本篇文章小编给大家分享一下python爬虫实现爬取同一个网站的多页数据代码实例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 一.爬虫的目的 从网上获 ...

  7. python爬取网上租房信息_Python爬虫入门 | 5 爬取小猪短租租房信息

    小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 1.爬取租房标题 按照惯例,先来爬下标题试试水,找到标题,复制xpath. 多复制几个房屋 ...

  8. python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法

    爬取的站点:http://beijing.8684.cn/ (1)环境配置,直接上代码: # -*- coding: utf-8 -*- import requests ##导入requests fr ...

  9. python爬取豆瓣电影信息_Python爬虫入门 | 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

最新文章

  1. Oracle 11g新特性之--虚拟列(Virtual Column)
  2. 世界最成功的僵尸网络使用Fast Flux技术躲避检测
  3. webrtc rtsp播放
  4. 进程间通信(5) 命名管道
  5. java区分不同的excel_Java处理excel两种不同的方式
  6. 计算机教学辅助在教学中的应用研究,云计算辅助教学在高职计算机教学中的应用研究.doc...
  7. 计算机图形学的核心领域,计算机图形学基础知识重点整理.pdf
  8. 车用TVS管 SM8S系列 国产替代
  9. dbgrideh的功能
  10. linuxweb集群mysql_企业web高可用集群实战之lvs+keepalived+mysql
  11. apiCloud中aui获取不到高度,pos.h为0,offsetHeight为0问题
  12. python实现打飞机小游戏
  13. NLP——12.词向量及相关应用
  14. python——设置渐变色
  15. TDD、FDD是什么意思?
  16. 贪心算法-会议安排问题
  17. StartUml 用例图
  18. SpringBoot Mybatis Starter 解析
  19. 计算机二级演示文稿合并PPT,[PPT考点]如何将两个幻灯片合并在一个幻灯片?
  20. 【天梯赛】L2-039 清点代码库** (25 point(s))

热门文章

  1. Android无障碍设计简介
  2. Cocos creator(JavaScript)- 简单实现连线小游戏
  3. Pairwise Body-Part Attention for Recognizing HOI(面向HOI识别的成对身体部位注意力机制)
  4. 微信网页版传输助手上线
  5. jupyter中配置多种虚拟环境
  6. 【LeetCode】1710.卡车上的最大单元数
  7. python找零钱问题_动态规划法(二)找零钱问题
  8. python面向对象思想汇报_思想汇报(二)——有关测试
  9. 【笔记】三张图读懂机器学习:基本概念、五大流派与九种常见算法
  10. mysql表如何删除一条数据_mysql如何删除表中一行数据?