IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 爬取教务管理系统成绩 -> 正文阅读

[Python知识库]爬取教务管理系统成绩

由于在学校期间没有重视学习,回家补了一段时间,想着用爬取本学校的教务管理系统自己的成绩来测试下成果。

完成步骤

  1. 分析网站获取信息

  2. 模拟浏览器进行登录

  3. 筛选数据获取成绩

所用到的库有selenium,time和re

1.分析网站获取信息

? ? ? ? 打开我们的教务管理系统:

?然后打开谷歌浏览器的F12开发者模式进行network抓包,随便填入账号密码来查看结果,我们的教务管理系统输入账号密码后是不需要输入验证码的,所以不用进行验证码处理。

在这里我们能够发现,输入了账号和密码之后,会发送出一个名为loginExt.action的post请求,在这个请求中可以查看到我们输入的账号密码,这里的pwd就是密码经过了前端加密,目前的学习还无法对这方面做出获取Cookie,所以使用selenium自动化的方法获取。

2.模拟浏览器进行登录并分析

使用selenium之前需要先导入整个代码所需要的包:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import re

通过selenium来获取Cookie:首先定位表单元素,我们对学号输入框进行右键元素检查获取,得到他们的Xpath路径:

右键再对右边方框中的Xpath进行复制,自动键入预定的数值就是我们的账号密码“username1”和“password1”,使用Keys.ENTER自动按回车登陆成功,附上代码:

web = webdriver.Chrome()
web.get(url)
web.find_element(By.XPATH, '//*[@id="username"]').send_keys('username1')
web.find_element(By.XPATH, '//*[@id="pwd"]').send_keys('password1', Keys.ENTER)

?登陆成功后分析登陆页面:

?不难发现,我的成绩在 "首页" -> "我的" -> 点击"我的成绩"方可得到成绩,于是我们按步骤点进"我的成绩":

web.find_element(By.XPATH, '//*[@id="main-nav"]/ul/li[2]/a').click()
web.find_element(By.XPATH, '//*[@id="main-nav"]/ul/li[2]/ul/li[8]/a').click()

?经过分析页面得到了我们的具体成绩在页面的iframe里面,在这里我首先的想法是切换到嵌套的iframe里面再进行成绩的提取:

web.switch_to.window(web.window_handles[-1])    # 首先将当前页面作为主页面
iframe = web.find_element(By.XPATH, '//*[@id="iframeMain"]')
web.switch_to.frame(iframe)

?但是切换到iframe页面后发现我们又回到了登录后的首页,在登陆后的首页无法找到具体成绩的元素,回过头再对上一步进入"我的成绩"页面进行分析,发现"我的成绩"里面有个href链接,于是点进去发现是一个单独的"我的成绩"页面,这个页面和之前的页面不同的是这个新"我的成绩"页面中使用F12查看具体成绩元素,元素不在嵌套的iframe界面中,那就可以直接提取了,狂喜!上面的切换到iframe也就无用了,在首页"我的成绩"节点下,拿到href链接,接着就是访问该链接,抓取该页面的源代码:

?

result = a.get_attribute('href')  # 这个链接是成绩的链接 但必须要保持登录状态
web.get(result)
web.switch_to.window(web.window_handles[-1])
# 在新窗口'我的成绩'页面提取内容
time.sleep(3)
S = web.page_source

3.筛选数据获取成绩

解析提取数据的时候也想着使用Xpath来,但失败了,发现这个页面的div属性值是每一次都不断变化的,基于自己的能力只能使用re对内容进行解析提取

obj = re.compile(r'<td class="gridselect">.*?<td>(?P<term>.*?)</td>'
                 r'.*?<td>(?P<course_code>.*?)</td>'
                 r'.*?<td>(?P<course_num>.*?)</td>'
                 r'.*?<td>(?P<course_name>.*?)</td>'
                 r'.*?<td>(?P<course_type>.*?)</td>'
                 r'.*?<td>(?P<course_nature>.*?)</td>'
                 r'.*?<td>(?P<credit>.*?)</td>'
                 r'.*?<td style="">(?P<score>.*?)</td>'
                 r'.*?<td style="">(?P<total_score>.*?)</td>', re.S)
obj2 = obj.finditer(S)
for it in obj2:
    print(it.group("course_name").strip())
    print(it.group("total_score").strip())

得到想要的结果没有截全:

总结:没有进行相应的存储,代码也没有模块化,没有考虑异常情况,不过也算是成功了,弥补在学校天天打游戏所空虚度过的时间,这个检验还有些许不完善。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 23:02:34  更:2022-01-29 23:02:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:31:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码