예제 #1
0
    def get_score(self, score_year=None, score_term=None, **kwargs):
        ''' 成绩信息 获取入口 '''
        score_url = self.school_url['SCORE_URL'] + self.account

        try:
            view_state = self._get_view_state(score_url, **kwargs)
        except RequestException:
            raise ScoreException(self.code, '获取成绩请求参数失败')

        payload = {
            '__VIEWSTATE': view_state,
            'Button2': u'在校学习成绩查询',
            'ddlXN': '',
            'ddlXQ': ''
        }

        try:
            res = self._post(score_url, data=payload, **kwargs)
            if res.status_code == 302:
                raise ScoreException(self.code, '成绩接口已关闭')
            elif res.status_code != 200:
                raise RequestException
        except RequestException:
            raise ScoreException(self.code, '获取成绩信息失败')

        html = res.content.decode('GB18030')
        tip = get_tip(html)
        if tip:
            raise ScoreException(self.code, tip)

        return ScoreParse(self.code, html).get_score(score_year, score_term)
    def get_score(self, score_year=None, score_term=None, use_api=3, **kwargs):
        ''' 成绩信息 获取入口
        :param score_year: 成绩学年
        :param score_term: 成绩学期
        :param use_api:    0.接口1, 1.接口2, 2.接口3 ...
        :param kwargs: requests模块参数
        return
        '''
        score_url = self.school_url['SCORE_URL'][use_api] + self.user.account

        try:
            view_state = self._get_view_state(score_url, **kwargs)
        except TooManyRedirects:
            msg = '可能是成绩接口地址不对,请尝试更改use_api值'
            raise ScoreException(self.code, msg)
        except RequestException:
            msg = '获取成绩请求参数失败'
            raise ScoreException(self.code, msg)

        payload = {
            '__VIEWSTATE': view_state,
            'hidLanguage:': '',
            'btn_zcj': '历年成绩',
            'ddl_kcxz': '',
            'ddlXN': '',
            'ddlXQ': ''
        }
        payload1 = {
            '__VIEWSTATE': view_state,
            'hidLanguage:': '',
            'Button1': '成绩统计',
            'ddl_kcxz': '',
            'ddlXN': '',
            'ddlXQ': ''
        }
        try:
            res = self._post(score_url, data=payload, **kwargs)
            res1 = self._post(score_url, data=payload1, **kwargs)
        except TooManyRedirects:
            raise ScoreException(self.code, '成绩接口已关闭')
        except RequestException:
            raise ScoreException(self.code, '获取成绩信息失败')

        html = res.content.decode('GB18030')
        html1 = res1.content.decode('GB18030')
        tip = get_alert_tip(html)
        if tip:
            raise ScoreException(self.code, tip)

        return ScoreParse(self.code, html, use_api,
                          html1).get_score(score_year, score_term)
    def _html_parse_of_score(self):
        tag = "Datagrid1"
        table = self.soup.find("table", {"id": tag})
        if not table:
            raise ScoreException(self.code, '获取成绩信息失败')

        rows = table.find_all('tr')
        rows.pop(0)
        self.score = {}
        self.score_info = {}
        self.all_college = {}
        pjzjd = self.get_pjxfjd()
        zyzrs = self.get_student_num()
        pjzjd_text = 'pjzjd'
        zyzrs_text = 'zyzrs'
        for row in rows:
            cells = row.find_all("td")
            # 学年学期
            year = cells[0].text
            term = cells[1].text
            # 课程名
            lesson_code = cells[2].text.strip()
            lesson_name = cells[3].text.strip()
            lesson_nature = cells[4].text.strip()
            credit = cells[6].text.strip() or 0
            point = cells[7].text.strip() or 0
            peace_score = cells[8].text.strip() or 0
            term_end_score = cells[10].text.strip() or 0
            all_score = cells[12].text.strip() or 0
            teach_college = cells[16].text.strip()
            score_dict = {
                "lesson_code": lesson_code,
                "lesson_name": lesson_name,
                "lesson_nature": lesson_nature,
                "credit": float(credit),
                "point": float(point),
                "peace_score": self.handle_data(peace_score),
                "term_end_score": self.handle_data(term_end_score),
                "all_score": self.handle_data(all_score),
                "teach_college": teach_college
            }
            # 有其他成绩内容则输出
            makeup_score = cells[14].text
            retake_score = cells[15].text
            if makeup_score != '\xa0':
                # 补考成绩
                score_dict['bkcj'] = makeup_score
            if retake_score != '\xa0':
                # 重修成绩
                score_dict['cxcj'] = retake_score
            # 组装数组格式的数据备用
            self.all_college[zyzrs_text] = self.handle_data(zyzrs)
            self.all_college[pjzjd_text] = self.handle_data(pjzjd)
            self.score_info[year] = self.score_info.get(year, {})
            self.score_info[year][term] = self.score_info[year].get(term, [])
            self.score_info[year][term].append(score_dict)
            self.score = {
                "score_info": self.score_info,
                "all_college": self.all_college
            }
예제 #4
0
    def get_score(self, score_year=None, score_term=None, use_api=0, **kwargs):
        ''' 成绩信息 获取入口
        :param score_year: 成绩学年
        :param score_term: 成绩学期
        :param use_api:    0.接口1, 1.接口2, 2.接口3
        :param kwargs: requests模块参数
        return
        '''
        score_url = self.school_url['SCORE_URL'][use_api] + self.account

        try:
            view_state = self._get_view_state(score_url, **kwargs)
        except TooManyRedirects:
            msg = '可能是成绩接口地址不对,请尝试更改use_api值'
            raise ScoreException(self.code, msg)
        except RequestException:
            msg = '获取成绩请求参数失败'
            raise ScoreException(self.code, msg)

        payload = {
            '__VIEWSTATE': view_state,
            'Button2': '在校学习成绩查询',
            'btn_zcj': '历年成绩',
            'btnCx': ' 查  询 ',
            'ddlXN': '',
            'ddlXQ': ''
        }
        try:
            res = self._post(score_url, data=payload, **kwargs)
            if res.status_code == 302:
                raise ScoreException(self.code, '成绩接口已关闭')
            elif res.status_code != 200:
                raise RequestException
        except RequestException:
            raise ScoreException(self.code, '获取成绩信息失败')

        html = res.content.decode('GB18030')
        tip = get_alert_tip(html)
        if tip:
            raise ScoreException(self.code, tip)

        return ScoreParse(self.code, html,
                          use_api).get_score(score_year, score_term)
예제 #5
0
    def get_score(self, year, term):
        ''' 返回成绩信息json格式 '''
        try:
            if year:
                if term:
                    return self.score_info[year][term]
                return self.score_info[year]
        except KeyError:
            raise ScoreException(self.code, '暂无成绩信息')

        return self.score_info
예제 #6
0
    def _html_parse_of_score(self):
        table = self.soup.find("table",
                               {"id": re.compile("Datagrid1", re.IGNORECASE)})
        if not table:
            raise ScoreException(self.code, '获取成绩信息失败')

        rows = table.find_all('tr')
        rows.pop(0)
        year = self.year
        term = self.term
        self.score_info = {}
        for row in rows:
            cells = row.find_all("td")
            # 课程代码
            lesson_code = cells[0].text
            # 课程名
            lesson_name = cells[1].text
            # 学分
            credit = cells[8].text.strip() or 0
            point = cells[9].text.strip() or 0
            # 最终成绩
            score = cells[4].text.strip() or 0
            score_dict = {
                "lesson_name": lesson_name,
                "credit": float(credit),
                "point": float(point),
                "score": self.handle_data(score)
            }
            # 有其他成绩内容则输出

            makeup_score = cells[6].text  # 补考成绩
            retake_score = cells[7].text  # 重修成绩
            if makeup_score != '\xa0':
                # 补考成绩
                score_dict['bkcj'] = makeup_score
            if retake_score != '\xa0':
                # 重修成绩
                score_dict['cxcj'] = retake_score
            # 组装数组格式的数据备用
            self.score_info[year] = self.score_info.get(year, {})
            self.score_info[year][term] = self.score_info[year].get(term, [])
            self.score_info[year][term].append(score_dict)
예제 #7
0
    def _html_parse_of_score(self):
        tag = "Datagrid1" if self.use_api != 3 else "DataGrid1"
        table = self.soup.find("table", {"id": tag})
        if not table:
            raise ScoreException(self.code, '获取成绩信息失败')

        rows = table.find_all('tr')
        rows.pop(0)
        self.score_info = {}
        for row in rows:
            cells = row.find_all("td")
            # 学年学期
            year = cells[0].text
            term = cells[1].text
            # 课程名
            lesson_name = cells[3].text.strip()
            credit = cells[6].text.strip() or 0
            point = cells[7].text.strip() or 0
            score = cells[8].text.strip() or 0
            score_dict = {
                "lesson_name": lesson_name,
                "credit": float(credit),
                "point": float(point),
                "score": self.handle_data(score)
            }
            # 有其他成绩内容则输出
            makeup_score = cells[10].text
            retake_score = cells[11].text
            if makeup_score != '\xa0':
                # 补考成绩
                score_dict['bkcj'] = makeup_score
            if retake_score != '\xa0':
                # 重修成绩
                score_dict['cxcj'] = retake_score
            # 组装数组格式的数据备用
            self.score_info[year] = self.score_info.get(year, {})
            self.score_info[year][term] = self.score_info[year].get(term, [])
            self.score_info[year][term].append(score_dict)
예제 #8
0
    def get_score(self, score_year=None, score_term=None, use_api=0, **kwargs):
        ''' 成绩信息 获取入口
        :param score_year: 成绩学年
        :param score_term: 成绩学期
        :param use_api:    0.接口1, 1.接口2, 2.接口3 ...
        :param kwargs: requests模块参数
        return
        '''
        score_url = self.school_url['SCORE_URL'][use_api] + self.user.account

        try:
            view_state = self._get_view_state(score_url, **kwargs)
        except TooManyRedirects:
            msg = '可能是成绩接口地址不对,请尝试更改use_api值'
            raise ScoreException(self.code, msg)
        except RequestException:
            msg = '获取成绩请求参数失败'
            raise ScoreException(self.code, msg)
        if score_year != None and score_term != None:
            # 按学年查询
            payload = {
                '__VIEWSTATE': view_state,
                'ddlXN': score_year,
                'ddlXQ': score_term,
                'txtQSCJ': '0',
                'txtZZCJ': '100',
                'Button1': '按学期查询'
            }
        elif score_year != None and score_term == None:
            # 按学期查询
            payload = {
                '__VIEWSTATE': view_state,
                'ddlXN': score_year,
                'ddlXQ': '',
                'txtQSCJ': '0',
                'txtZZCJ': '100',
                'Button5': '按学年查询'
            }
        elif score_year == None and score_term == None:
            # 在校成绩查询
            payload = {
                '__VIEWSTATE': view_state,
                'Button2': '在校学习成绩查询',
                'btn_zcj': '历年成绩',
                'btnCx': ' 查  询 ',
                'ddlXN': '',
                'ddlXQ': ''
            }

        try:
            res = self._post(score_url, data=payload, **kwargs)
        except TooManyRedirects:
            raise ScoreException(self.code, '成绩接口已关闭')
        except RequestException:
            raise ScoreException(self.code, '获取成绩信息失败')

        tip = get_alert_tip(res.text)
        if tip:
            raise ScoreException(self.code, tip)

        return ScoreParse(self.code, res.text, use_api, score_year,
                          score_term).get_score(score_year, score_term)