zoukankan      html  css  js  c++  java
  • 教务处爬虫

    教务处爬虫(提交表单模拟登录)

    1.尝试分析登陆方式

    发现教务处是POST,请求表单的方式获得账号密码.

    查看表单格式:

    Form Data={

    muser:学号,(明文显示)

    passwd:密码,(明文显示)

    x:点击处横坐标,

    y:点击处纵坐标

    }

    x,y这两个数据是这个图中LOGIN按钮上的坐标,你鼠标点击它的时候,坐标会发给服务器.

    2.用最简单的requests库实现模拟登录进教务处

    首先创建一个会话session,使用post方式发给登录接口('http://59.77.226.32/logincheck.asp')

    import requests
    headers={
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'Origin': 'http//jwch.fzu.edu.cn',
        'Proxy-Connection': 'keep-alive',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
        'Referer': 'http://jwch.fzu.edu.cn/',
    }
    formData = {
        'muser': '你的账号',
        'passwd': '你的密码',
        'x':23,
        'y':23,#(x,y)是按钮的确定框的坐标
    }
    
    def request():
        url = 'http://59.77.226.32/logincheck.asp'
        session=requests.session()  #创建一个会话
        response=session.post(url,headers=headers,data=formData) #post请求提交表单
        print(response.status_code)#返回状态码
        print(response.text)#返回html文本
    
    if __name__=='__main__':
        request()
    

    运行结果应如下:

    {{图4.PNG(uploading...)}}

    对代码观察发现,登陆后的教务处是由多个内嵌页面组成.所以我们继续再会话后面追加请求.我们只要分析出这些内嵌页面的api即可完成.

    3.分析内嵌页面的api

    这四个文件aspx文件,就是我们要找的文件,接口地址分别是:

    | http://59.77.226.35/default.aspx?id=20199131939864460 |
    | http://59.77.226.35/top.aspx?id=20199131939864460 |
    | http://59.77.226.35/left.aspx?id=20199131939864460 |
    | http://59.77.226.35/right.aspx?id=20199131939864460 |

    对着四个地址格式进行分析:

    固定地址+文件名.aspx+id

    id的值应该是请求时间如2019/9/13/19:39:86:44:60

    这个时间的生成是不需要我们操作的,如果我们仔细观察网页源代码,即可发现,模拟登录时,网站已经返回给我们参数了.

    使用正则表示式提取.

    4.会话下请求内嵌页面

    然后紧接前面的会话下,对上面的四个地址进行get请求,得到返回.

    值得注意的一件事是:需要修改headers请求头中的'Referer'值,针对不同地址的Referer属性是不同的

    修改后的代码如下:

    rootUrl='http://59.77.226.35/'
    def request():
        url = 'http://59.77.226.32/logincheck.asp'
        session=requests.session()  #创建一个会话
        response=session.post(url,headers=headers,data=formData) #post请求提交表单
        html=response.text
        #正则提取
        top=re.search(r'top.aspx?id=d+',html).group()
        num = re.search(r'=d+',top).group()[1:]
        #拼接地址
        top=rootUrl+'top.aspx?id='+num
        left=rootUrl+'left.aspx?id='+num
        right=rootUrl+'right.aspx?id='+num
        default=rootUrl+'default.aspx?id='+num
        headers_clone = headers #重新搞一个请求头
        headers_clone['Referer']=left
        #发送get请求
        res = session.get(top, headers=headers_clone)
        print(res.text)
    

    可以获得下面信息

    5.拿到更多信息

    根据上面的代码,我们可以继续分析其他页面的地址,拿到更多的个人信息

    比如拿到个人信息:

    本博客仅用于学习参考.

  • 相关阅读:
    rqnoj PID95:多多看DVD(加强版)
    洛谷1309:瑞士轮
    codevs 1052:地鼠游戏
    noi openjudge7627:鸡蛋的硬度
    codevs 1039:数的划分
    lesson 20 pioneer pilots
    TPO-10 C2 Return a literature book
    lesson 19 A very dear cat
    word record 01
    lesson 18 Electric currents in modern art
  • 原文地址:https://www.cnblogs.com/JustNo/p/11518561.html
Copyright © 2011-2022 走看看