爬取教务在线获取成绩

2024-04-26 23:32

本文主要是介绍爬取教务在线获取成绩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.查看网页源代码获取信息
    • 2.模拟浏览器登陆
    • 3.成功登陆之后开始你的表演
    • 4.筛选数据
    • 5.结果图

1.查看网页源代码获取信息

1.1首先进入教务在线网页,查看网页源代码,找到登陆账号,密码,以及验证码的位置,可以右键单击需要查找的目标查看元素,找到其在标签中的位置。
在这里插入图片描述
1.2找到验证码的相对路径,我们就可以模拟请求获取验证码并显示,src="…"这是相对地址
在这里插入图片描述1.3错误登陆系统,查看登陆时浏览器的账号,密码,验证码等参数如何上传,如下图通过post请求的方法将账号密码以及验证码通过表单数据上传
在这里插入图片描述

2.模拟浏览器登陆

2.1 知道了验证码图片的相对地址之后,将网页地址与相对地址进行拼接并将验证码图片获取到本地

#将浏览器中几个重要的参数要补全,难以抉择选择请求参数就 全部写上
url='http://jwzx.usc.edu.cn'
try: kv={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'}Data={'page':'1','rows':'15','sort':'ReleaseData','order':'DESC'}img_Url = 'http://jwzx.usc.edu.cn' + '/Core/verify_code.ashx'Img1 = requests.session()Img = Img1.get(img_Url, headers=kv)

2.2 这时候获取到的并不是图片资源,而是二进制编码的数据,将二进制数据写入本地的文件,并通过opencv库对图片文件进行读取

file = "H:\\python\\yanzhengma.png"playFile = open(file, 'wb')playFile.write(Img.content)playFile.close()img = cv2.imread("H:\\python\\yanzhengma.png", 1)cv2.imshow("1", img)cv2.waitKey(0)

此时验证码能够显示
在这里插入图片描述2.3 post请求登陆系统,将账号、密码、输入的验证码一起提交 此处要点:提交验证码时必须将获取验证码时得到cookie一并上传,这样输入的验证码code才能与获取下来的验证码进行匹配

Code=input("验证码:")
data={'UserName':"your account",'Password':"your password",'Code':Code
}
kv1={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0','Connection':'keep-alive',#'Cookie':Img.cookies,'X-Requested-with':'XMLHttpRequest',}
try:res=Img1.post('http://jwzx.usc.edu.cn/Login/Login',headers=kv1,cookies=requests.utils.dict_from_cookiejar(Img.cookies),data=data)print(res.status_code)res.encoding=res.apparent_encodingprint(res.text)
except:print("登陆失败")

3.成功登陆之后开始你的表演

3.1 打开成绩的目录,按下F12找到,刷新网页查看网络请求,找到相应的请求网址,如下图
在这里插入图片描述3.2 登陆之后,响应数据包中的cookie相当于密令,每一次获取数据操作都得带着它, 请求数据时需要使用这个cookie

Form_Data={'termCode':'2018-2019-2','sort':'Id','order':'ASC'
}
'''Data1={'batchId':'20190530095305274886878ad9552af',
'sort':'CourseName','order':'ASC'}'''
try:res1=requests.post('http://jwzx.usc.edu.cn/Student/StuTermCourseScore/GetList',cookies=requests.utils.dict_from_cookiejar(res.cookies),headers=kv1,data=Form_Data)print("请求状态:",res1.status_code)print(res1.text)
except:print("获取成绩失败")

4.筛选数据

4.1 相应的数据可以通过F12查看数据的格式,一般都为json格式
JSON格式4.2 在这里不能直接提取数据,需要使用json库的函数将其转化为python的数据格式
转化4.3 根据python数据格式提取需要的数据
在这里插入图片描述

5.结果图

成绩太low就不展示了…wuwuwu
在这里插入图片描述
程序源代码下载地址请点击

这篇关于爬取教务在线获取成绩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/938957

相关文章

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

Java子线程无法获取Attributes的解决方法(最新推荐)

《Java子线程无法获取Attributes的解决方法(最新推荐)》在Java多线程编程中,子线程无法直接获取主线程设置的Attributes是一个常见问题,本文探讨了这一问题的原因,并提供了两种解决... 目录一、问题原因二、解决方案1. 直接传递数据2. 使用ThreadLocal(适用于线程独立数据)

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

电力系统中的A类在线监测装置—APView400

随着电力系统的日益复杂和人们对电能质量要求的提高,电能质量在线监测装置在电力系统中得到广泛应用。目前,市场上的在线监测装置主要分为A类和B类两种类型,A类和B类在线监测装置主要区别在于应用场景、技术参数、通讯协议和扩展性。选择时应根据实际需求和应用场景综合考虑,并定期维护和校准。电能质量在线监测装置是用于实时监测电力系统中的电能质量参数的设备。 APView400电能质量A类在线监测装置以其多核

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

JS和jQuery获取节点的兄弟,父级,子级元素

原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素。 <div id="test"><div></div><div></div

vcpkg子包路径批量获取

获取vcpkg 子包的路径,并拼接为set(CMAKE_PREFIX_PATH “拼接路径” ) import osdef find_directories_with_subdirs(root_dir):# 构建根目录下的 "packages" 文件夹路径root_packages_dir = os.path.join(root_dir, "packages")# 如果 "packages"

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;