python 爬取学校官网课表信息(正方)

1.模拟登录   

通过随意提交登录数据可以在浏览器开发者模式中找到一个post请求。6f0530e53b5c42ef88f2b90e718c333a.png66c17ad2b2084ae18c51064a34ae2120.png47c5d5dd41bf4b5e9f49f5928038f8fa.png

而且携带的表单数据为

'__VIEWSTATE':'dDw3OTkxMjIwNTU7Oz70swKykHaJX/KdL3MX4ah0OyBJgA==',
'TextBox1': id,
'TextBox2': password,
'TextBox3': textword,
'RadioButtonList1':'%D1%A7%C9%FA',
'Button1':''

' __VIEWSTATE':'dDw3OTkxMjIwNTU7Oz70swKykHaJX/KdL3MX4ah0OyBJgA=='

这个数据并不是我们填写的数据,在网页源码查找可以找到,利用get请求获取__VIEWSTATE,并打印。

s=requests.session()
headers={
'Cookie': 'ASP.NET_SessionId=fbbwm3451t0x2fmrlkgvan45',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}

url='http://113.201.151.38:9999'
#网站的url
response=s.get(url=url,headers=headers)
VIEWSTATE=re.findall('<input type="hidden" name="__VIEWSTATE" value=(.*?) />',response.text)
print(VIEWSTATE)

然后通过获得的__VIEWSTATE结合 帐号 密码 验证码 组成表单数据

data={
'__VIEWSTATE':VIEWSTATE,
'TextBox1': idword,
'TextBox2': password,
'TextBox3': textword,
'RadioButtonList1':'%T1%Y7%R9%Qq',
'Button1':''
}

然后通过post请求获取网页数据,并打印状态码。

#通过get官网的url获取页面信息,然后通过正则表达式获取VIEWSTATE的值
imgeurl='http://113.201.151.38:9999/CheckCode.aspx'#请求验证码url并写入
imgeread=s.get(url=imgeurl,headers=headers).content
with open('imgeread.jpg', mode='wb') as f:
            f.write(imgeread)
            print("over")
idword=input("请输入帐号:")
password=input("请输入密码:")
textword=input("请输入验证码:")

#登录


loginurl='http://113.201.151.38:9999/Default2.aspx'
#表单数据
data={
'__VIEWSTATE':VIEWSTATE,
'TextBox1': idword,
'TextBox2': password,
'TextBox3': textword,
'RadioButtonList1':'%D1%A7%C9%FA',
'Button1':''
}
headers1={
'Referer':'http://113.201.151.38:9999/',
'Cookie':'ASP.NET_SessionId=fbbwm3451t0x2fmrlkgvan45',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.50'
}
login=s.post(url=loginurl,headers=headers1,data=data)
print(login.status_code)

2.获取课表信息 

 找到课表页面,查看页面的url618b3ce463df45748d44b20389c4467c.png

查看get的附加的内容9dc432f4402d41d3bdda4a1de0a08fb2.png

查看请求头数据  77cee782a382409a997c5b9d8a4f76c5.png

模拟浏览器形式进行请求 

ke='http://113.201.151.38:9999/tjkbcx.aspx'
ke3={
'xh': idword,
'xm': '%C0%EE%D2%AB%BB%D4',
'gnmkdm': 'N121601'
}
#get请求附加数据

he3={
'Cookie': 'ASP.NET_SessionId=fbbwm3451t0x2fmrlkgvan45',
'Connection': 'keep-alive',
'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.9',
'Upgrade-Insecure-Requests': '1',
'Referer': 'http://113.201.151.38:9999/xs_main.aspx?xh='+idword,
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.50'
}
#请求头
kereback=s.get(url=ke,params=ke3,headers=he3)
haaa=re.findall('(.*?)<br>',kereback.text)
#将请求的数据用正则表达式进行筛选
print(kereback.status_code)
#打印请求状态码
print(haaa)
#打印课表数据

     请求头文件必须有refere和cookie,如果没有就无法定向请求                      

bf7106e4087e46d9b2873401b0480efb.png

3.打印课表数据 

 最后打印课表数据

 

D:\python\project\myproject\venv\Scripts\python.exe D:/python/project/myproject/156.py
['"dDw3OTkxMjIwNTU7Oz70swKykHaJX/KdL3MX4ah0OyBJgA=="']
over
请输入帐号:**************
请输入密码:*************
请输入验证码:************
连接状态码:200
连接状态码:200

#部分课表数据
['\t\t<td rowspan="6" width="1%">上午</td><td width="1%">第一节</td><td align="Center" rowspan="2" width="7%">软件项目管理', '14-16(1,2)', '****', '*****', '', '', '软件项目管理',

4.整体代码  

全部代码    代码中有对登陆后的页面的请求(未打印输出)

import requests #数据请求模块
import re
import os
s=requests.session()
headers={
'Cookie': 'ASP.NET_SessionId=fbbwm3451t0x2fmrlkgvan45',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}

url='http://113.201.151.38:9999'
#网站的url
response=s.get(url=url,headers=headers)
VIEWSTATE=re.findall('<input type="hidden" name="__VIEWSTATE" value=(.*?) />',response.text)
print(VIEWSTATE)
#通过get官网的url获取页面信息,然后通过正则表达式获取VIEWSTATE的值
imgeurl='http://113.201.151.38:9999/CheckCode.aspx'#请求验证码url并写入
imgeread=s.get(url=imgeurl,headers=headers).content
with open('imgeread.jpg', mode='wb') as f:
            f.write(imgeread)
            print("over")
idword=input("请输入帐号:")
password=input("请输入密码:")
textword=input("请输入验证码:")

#登录


loginurl='http://113.201.151.38:9999/Default2.aspx'
#表单数据
data={
'__VIEWSTATE':VIEWSTATE,
'TextBox1': idword,
'TextBox2': password,
'TextBox3': textword,
'RadioButtonList1':'%D1%A7%C9%FA',
'Button1':''
}
headers1={
'Referer':'http://113.201.151.38:9999/',
'Cookie':'ASP.NET_SessionId=fbbwm3451t0x2fmrlkgvan45',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.50'
}
#
login=s.post(url=loginurl,headers=headers1,data=data)

insurl='http://113.201.151.38:9999/xs_main.aspx'
param ={
   'kw':'2020090116'
}
he2={
'Referer': 'http://113.201.151.38:9999/Default2.aspx'
}#在请求头中添加referer防止出现302情况
inside=s.get(url=insurl,params=param,headers=he2)
#这个get请求是进入官网后对默认界面进行页面读取
print("登陆状态码:"inside.status_code)
#打印请求状态码

ke='http://113.201.151.38:9999/tjkbcx.aspx'

ke3={
'xh': idword,
'xm': '%C0%EE%D2%AB%BB%D4',
'gnmkdm': 'N121601'
}
#get请求附加数据

he3={
'Cookie': 'ASP.NET_SessionId=fbbwm3451t0x2fmrlkgvan45',
'Connection': 'keep-alive',
'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.9',
'Upgrade-Insecure-Requests': '1',
'Referer': 'http://113.201.151.38:9999/xs_main.aspx?xh='+idword,
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.50'
}
#请求头
kereback=s.get(url=ke,params=ke3,headers=he3)
haaa=re.findall('(.*?)<br>',kereback.text)
#将请求的数据用正则表达式进行筛选
print("课表请求状态码:"kereback.status_code)
#打印请求状态码
print(haaa)
#打印课表数据

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值