首页 > 编程语言 >Python爬虫获取校园课表(强制系统举例)

Python爬虫获取校园课表(强制系统举例)

时间:2023-12-11 17:35:30浏览次数:48  
标签:cookies header Python 爬虫 课表 url www edu paisi

Http:超文本传输协议

Https:安全的http

首先引入request库:pip install requests 

先F12打开页面检查,在network(网络)里面,然后刷新页面,会发先有个请求文档,点击并观察它:

在常规里面可以看到请求地址为https://www.paisi.edu.cn:8181/jsxsd/?tdsourcetag=s_pcqq_aiomsg,将它复制到新页面确实https://www.paisi.edu.cn:8181/jsxsd,我们需要的url就是这个去掉?后面的,还观察到请求方法为GET。

再观察请求标头(header),前面带 : 的和Sec开头的可以忽略这里用不到,将从Accept到Cache-Control的和Upgrade-Insecure-Requests,User-Agent的内容全部复制,然后在python里新建一个字典:

header = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*,"
        "q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Accept-Encoding": "gzip,deflate,br",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "Cache-Control": "max-age=0",
    "Content-Length": "106",
    "Content-Type": "application/x-www-form-urlencoded",
    "Upgrade-Insecure-Requests": "1",
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'
}

然后得到url和header我们就可以去获取cookies,直接写一个获取cookies的方法:

import requests

ses=requests.session()

def get_login_cookies():
    url= 'https://www.paisi.edu.cn:8181/jsxsd/'
    ses.get(url=url,headers=headers)
    cookies =ses.cookies.get_dict()
    cookies = str(cookies).replace("{", '').replace("'", '').replace(":", '=').replace('}', '').replace(",", ";")
    cookies = cookies.replace(" ", '')
    return cookies

 然后就可以去模拟登录账号了

但是登录你得先有一个账号来获取登录的信息。这里我就随便拿一个账号举例了,先在网页里面登录,然后在网络检查找到登录的文档:

这里需要查看负载的内容,将负载的所有内容复制并定义一个字典(注意:这里的userPassword我隐藏了,网页也隐藏了,编写的时候也要写):

data = {
    'userAccount': "2022126002", #学号
    'userPassword': passoword, #密码
    'encoded': encoded, #算法加密内容
    'pwdstr1': '',
    'pwdstr2': ''
}

不同的网站需求都不一样

当我们再次检查请求标头的时候发现大多数跟刚刚登录网页的一样,所以直接用刚刚的请求头再加两个参数Orign和Referer就行,在定义一个方法为模拟登录账号,该方法需要携带刚刚获取的cookie参数:

def login(cookie):
    url = 'https://www.paisi.edu.cn:8181/jsxsd/xk/LoginToXk'

    header["Origin"] = "https://www.paisi.edu.cn:8181"
    header["Referer"]= "https://www.paisi.edu.cn:8181/jsxs"
    header["Cookie"]= cookie

    msg = ses.post(url, headers=header, data=data, timeout=1000).text  # 这个跳转
    # print("cookies验证:"+str(msg))
    return str(msg)

 现在我们的cookie就会被认为是已经登陆了的了。

然后就是获取课表了,在网页先查询下课表,然后像刚刚那样检查页面的网络信息,点击新增的查询课表文档:

跟刚刚的方法分析参数信息就行:(cookies为第一步登录网页获取的cookies,我只是将返回的数据定义下来了)

def get_class():
    url="https://www.paisi.edu.cn:8181/jsxsd/xskb/xskb_list.do"
    
    header["Referer"] = "https://www.paisi.edu.cn:8181/jsxsd/framework/xsMain.jsp"
    header["Cookie"] = cookies
    msg = ses.get(url=url,headers=header)
    # print(str(msg))
    # print(msg.text)
    return msg.text

 这样就可以返回课表的html源码了。

但是如果我们想要的是课程的各项数据,可以使用BeauitifulSoup这个库。以我这个举例:

soup = BeautifulSoup(text,'html.parser')
all_classes = soup.findAll("div",attrs={"class": "kbcontent"})
for i in all_classes:
    print(i)

这里的意思就是先定义一个BeautifulSoup的参数,让他解析类型为html的,第二步则是获取html中标签为div的且class名为kbcontent的内容。运行出来就是这样:

还有种方法就是使用etree库也可以获取数据,这里就不介绍了。

标签:cookies,header,Python,爬虫,课表,url,www,edu,paisi
From: https://www.cnblogs.com/hepingan/p/17869638.html

相关文章

  • Python_Gui_tkinker学习笔记
    #-*-coding:utf-8-*-importtkinterastk创建主窗口#调用Tk()创建主窗口root_window=tk.Tk()窗口名字#给主窗口起一个名字,也就是窗口的名字root_window.title('C语言中文网:c.biancheng.net')打开窗口#开启主循环,让窗口处于显示状态root_window.mainloop()创......
  • Python和C++之间
    编程语言编程语言创造来都是为了解决实际问题的了解一门第二,甚至第三语言。因为只有你了解了不同工具的特性,以及它们擅长解决的问题,你才能更高效地在日常工作中运用它们。为问题选择正确的语言/工具/解决方案,将能大大减少解决问题所需的工作量训练你习惯跳出一种语言或范式的......
  • Python函数
    【一】函数的定义和使用函数可以提高代码可读性方便维护函数的使用必须遵循’先定义,后调用’的原则。函数的定义就相当于事先将函数体代码保存起来,然后将内存地址赋值给函数名,函数名就是对这段代码的引用,这和变量的定义是相似的。没有事先定义函数而直接调用,就相当于......
  • 使用Python合并多个Excel文件
    合并Excel可以将多个文件中的数据合并到一个文件中,这样可以帮助我们更好地汇总和管理数据。日常工作中,合并Excel主要有以下两种需求:将多个Excel文件合并为一个文件将多个Excel工作表合并为一个工作表这篇文章将介绍如何使用第三方Python库Spire.XLSforPython实现以上两种......
  • 扫描并清除重复文件的Python脚本
    电脑里存的照片越来越多,其中有很多是重复的。如果依赖人边去一张一张对比,需要的工作量太大了。下面的Python脚本在一个目录树上递归地对所有文件作MD5校验,将重复的文件找出来。保留用户指定的文件,将多余的文件全部删除掉。#!/usr/bin/envpython3importsysimporthashlibim......
  • node调用python输出中文乱码问题
    问题描述使用node的children_process模块调用python脚本文件,出现输出信息为乱码问题//node脚本const{spawn}=require('child_process');constpythonProcess=spawn('python',['./test.python']);pythonProcess.stdout.on('data',(data)=>{......
  • Python_数据结构的应用heap
    数据结构栈-->stack队列-->queue树-->tree堆-->heap散列-->hash图-->graph图结构一般包括顶点和边邻接矩阵DAG,DirectedAcyclicGraph即「有向无环图」树树(Tree)是一种非线性的数据结构,由n个节点组成,其中每个节点都有零个或多个子节点。......
  • python数据类型元组、列表、集合、字典相互嵌套
    系统Windows10专业工作站版22H2软件python-3.9.6-amd64.exe拓展库:jupyter==1.0.0notebook==7.0.61.元组嵌套1.1元组嵌套元组try:tuple0=((1,2,3),(1,2,3),(1,2,3))print(tuple0,type(tuple0))except:print('error')((1,2,3),(1,2,3),(1,2,......
  • map(python中的字典)
    //创建一个空的map,键是字符串类型,值是整数类型myMap:=make(map[string]int)//创建有值的map//初始化并赋值myMap:=map[string]int{"apple":1,"banana":2,"orange":3,}//添加修改元素myMap["grape"]=4//添加元素myMa......
  • 【python基础之函数】--- 函数入门
    title:【python基础之函数】---函数入门date:2023-12-0818:50:06updated:2023-12-1114:30:00description:cover:https://home.cnblogs.com/u/dream-ze/函数的基本使用目前为止,借助之前的学习内容,是已经能开发一些功能简单的小程序了但随着程序功能......