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 爬取学校官网课表信息(正方) -> 正文阅读

[Python知识库]python 爬取学校官网课表信息(正方)

1.模拟登录? ?

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

而且携带的表单数据为

'__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':'%D1%A7%C9%FA',
'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.获取课表信息?

?找到课表页面,查看页面的url

查看get的附加的内容

查看请求头数据??

模拟浏览器形式进行请求?

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,如果没有就无法定向请求? ? ? ? ? ? ? ? ? ? ??

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)
#打印课表数据
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:49:11  更:2022-09-30 00:49:36 
 
开发: 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 12:51:40-

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