python3强智教务系统个人课表爬虫

前言之前写过一篇用webdriver爬取教务系统课表的爬虫,用的是selenium自动化的无头浏览器模拟登录,今天带来的是用requests请求实现的爬虫。工具requests库实现对网页的请求,execjs库实现是js脚本的执行,bs4对爬取的数据进行清洗,csv库实现对数据的储存。步骤①首先是登录获取会话(session)先在输入框乱输入,按F12,登录获取登录页面的表单信息格式...
摘要由CSDN通过智能技术生成

前言

之前写过一篇用webdriver爬取教务系统课表的爬虫,用的是selenium自动化的无头浏览器模拟登录,今天带来的是用requests请求实现的爬虫。

工具

requests库实现对网页的请求,execjs库实现是js脚本的执行,bs4对爬取的数据进行清洗,csv库实现对数据的储存。

步骤

①首先是登录获取会话(session)

在这里插入图片描述
先在输入框乱输入,按F12,登录获取登录页面的表单信息格式
在这里插入图片描述
在这里插入图片描述
发现是POST请求,表单为加密过的,此时查看页面源代码,检查是如何加密的
在这里插入图片描述
再往下看到js,发现是根据encodeInp()进行加密的
在这里插入图片描述
再次检查页面源代码并没有发现此函数,那就只能是存在JS文件里面的
在这里插入图片描述
在这里插入图片描述
虽然后来发现是Base64加密方式,但是没关系了,用python的execjs来执行加密,记得将conwork.js下载下来放在跟python文件的同个目录
request请求后获取会话,准备到目的网页进行数据爬取

    def get_js(self, msg):  # python 调用JS加密 返回 加密后的结果
        with open('conwork.js', encoding='utf-8') as f:
            js = execjs.compile(f.read())
            return js.call('encodeInp', msg)

    def login_requests(self):
        user = '账号'
        pwd = '密码'
        csv_file_path = r'E://py//个人学期课程表.csv'
        encode = str(self.get_js(user)) + "%%%" + str(self.get_js(pwd)) + "="  # 获得加密后的东西
        form_data = {
   
            'encoded': encode
        }
        r_session = requests.session()
        r_session.post(self.login_url, headers=self.header, data=form_data)
        return r_session

②爬取数据

直接来到网页显示的课表页面,将此时的URL复制下来
又发现课表有多选框,所以为了数据准确性,需要进行post数据
在这里插入图片描述
周次的数据选择全部,也就是0
在这里插入图片描述
学期按时间,本次选择2019-2020-2
在这里插入图片描述
放大也选择是
在这里插入图片描述
请求的数据如下

        post_data = {
   
            'zc': '0', #周次选择全部
            'xnxq01id': '2019-2020-2', #学期
            'sfFd': '1' #放大
        }

根据登录的会话进行再次请求

post_data = {
   
            'zc': '0',  # 周次选择全部
            'xnxq01id': '2019-2020-2',  # 学期
            'sfFd': '1'  # 放大
        }
        response = r_session.get(self.score_url, headers=self.header,data=post_data)

③数据清洗

在这里插入图片描述
使用beautifulsoup进行数据筛选,弄出符合csv的二维列表格式

        soup = BeautifulSoup(response.text, 'lxml')
        page = soup.find_all('div', attrs={
   'class': "kbcontent"})
        teachers1, teachers2 = [], []
        weeks1, weeks2 = [], []
        classrooms1, classrooms2 = [], []
        for i in page:
            teachers1.append(i.find('font', attrs={
   
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬虫教务系统的方法有多种。根据引用,你可以通过模拟登录来实现。首先,你需要分析登录过程,了解登录请求的参数和地址。然后,你可以使用Python的requests库发送POST请求,将你的账号和密码作为参数发送给服务器。此外,如果登录时需要验证码,你可以使用百度的OCR技术来进行验证码的识别。最后,你可以使用execjs库来执行JavaScript代码,以查询成绩。 另一种简单的方法是使用Cookie来绕过登录验证。根据引用,教务系统通常通过用户Request请求中的Cookie进行身份识别。因此,你可以在爬虫访问时自建表头Header,并在表头中添加已登录的Cookie。这样,你就可以成功登录教务系统。 综上所述,Python爬虫教务系统的方法可以通过模拟登录或使用Cookie来实现。具体的实现细节取决于你所访问的教务系统的具体要求和限制。 - 本文介绍用python模拟登录中国海洋大学教务系统的方法,此系统为湖南青果软件公司开发,因此如果你学校的教务系统也是青果开发的,那么此文对你的模拟登录也会有一定的借鉴意义。 - 使用爬虫脚本成功登录教务系统,由于网站前后端分离各自负责不同工作,网站通常通过用户Request请求中的Cookie进行身份识别,因此实现登录的最简单方法就是在爬虫访问时自建表头Header,在表头中添加已登录的Cookie即可绕过登录验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值