python正方系统课表爬取

使用模块requests,re

爬取思路

1.模拟登录正方系统

2.爬取课表

1.requests模拟登录正方系统


F12 network可以查找到我们post的数据


TextBox1是学号,TextBox2是密码,TextBox3是验证码,从上图可以知道,登录正方系统需要学号,密码,除了学号密码,正方系统里还有隐藏的参数,我们可以查看网页源代码找到


一个是__VIEWSTATE,另一个是__VIEWSTATEGENERATOR

这时候我们就可以构造我们的post参数了,代码如下,header为上图的User_Agent

def login():
    # 以字典的形式添加请求头
    header = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
    }
    # 使用get方法发送请求获取网页源码
    response=requests.post("http://210.38.162.116/(wbvxup4512rto455zsbdev23)/default2.aspx",    #登录
                             headers=header,
                             data={'__VIEWSTATE':'dDwtMTg3MTM5OTI5MTs7PjJ06Q8x0sjwFTIugwoEgtaDQze7',
                                   '__VIEWSTATEGENERATOR':'92719903',
                                   'TextBox1':'学号',
                                   'TextBox2': '密码',
                                   'RadioButtonList1': '学生',
                                   'Button1': ''
                                   }
                             )
    s = response.content
    s = s.decode('gbk')   #转码,
    s=str(s)
    regx = r'<span id="Label3">欢迎您:</span>'  # 正则匹配
    pattern = re.compile(regx)  # 编译
    res= re.findall(pattern, s)
    print(res)

post时选择学生,按钮是登录,键值是input的name属性。由于我们没有请求验证码,所以是不需要输入验证码的,这也是正方系统的漏洞吧。能跳过验证码还是简单了许多,如果需要验证码,那就需要加一个请求验证码的链接。

判断是否成功登录的方式是返回的页面是否有 欢迎您,xxx,写一个正则表达式来匹配。



当出现这样的结果就是登录成功啦。

2.爬取课表

在课表右键检查network可以找到到课表的请求链接


直接抓取里面的内容,注意编码问题,否则会乱码

def class_table():
    header2 = {
        "Referer": "http://210.38.162.116/(wbvxup4512rto455zsbdev23)/",      #课表回调头
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
    }
    response = requests.post("http://210.38.162.116/(wbvxup4512rto455zsbdev23)/xskbcx.aspx?xh=161110073&xm=%D7%AF%D4%F3%E5%AB&gnmkdm=N121603",headers=header2)  #获取课表
    s = response.content
    s = s.decode('gbk')
    regx = r'<td [\w\W]*?>([\w\W]*?)<\/td>'  # 正则匹配
    pattern = re.compile(regx)  # 编译
    res= re.findall(pattern, s)
    for i in range(0,18):    #去除无用的数组
        res.remove(res[0])
    return res

这次抓取需要再加一个回调头。通过正则和筛选就能获取到我们所需要的课表信息啦

运行结果如下


爬取正方系统其他信息的原理也是一样的。如果出现像学期选择的按钮,像登录一样post处理就可以了

猜你喜欢

转载自blog.csdn.net/wlustre/article/details/80723085
今日推荐