IT笔记pythonPython爬虫获取校园课表(强制系统举例)
何平安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里新建一个字典:
1 2 3 4 5 6 7 8 9 10 11
| 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的方法:
1 2 3 4 5 6 7 8 9 10 11
| 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我隐藏了,网页也隐藏了,编写的时候也要写):
1 2 3 4 5 6 7
| data = { 'userAccount': "2022126002", 'userPassword': passoword, 'encoded': encoded, 'pwdstr1': '', 'pwdstr2': '' }
|
不同的网站需求都不一样
当我们再次检查请求标头的时候发现大多数跟刚刚登录网页的一样,所以直接用刚刚的请求头再加两个参数Orign和Referer就行,在定义一个方法为模拟登录账号,该方法需要携带刚刚获取的cookie参数:
1 2 3 4 5 6 7 8 9 10
| 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,我只是将返回的数据定义下来了)
1 2 3 4 5 6 7 8 9
| 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) return msg.text
|
这样就可以返回课表的html源码了。
但是如果我们想要的是课程的各项数据,可以使用BeauitifulSoup这个库。以我这个举例:
1 2 3 4
| 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库也可以获取数据,这里就不介绍了。