爬取正方教务管理系统获取学生信息

新版正方教务系统请点这里:模拟登陆新版正方教务管理系统(获取学籍信息、课表和成绩)

最近想学点爬虫玩玩,拿学校的教务系统练练手。学校与很多高校一样,用的是正方教务管理系统,非常的不好用,经常出现登陆不上去、卡死的情况,主页如下图所示:

主页

主页地址:http://222.24.62.120

模拟登录


1. 分析登录的URL和所需提供的数据

我们输入学号、密码和验证码登录后,点击登录。这时浏览器会向服务器提交一个POST请求:

登录请求

我们由上图中的数据可知,登录请求的URL地址为:

http://222.24.62.120/default2.aspx

所提交的数据除了学号、密码、验证码、用户类型,还有其他的数据:

  • __VIEWSTATE在源码中可以找到,是一个隐藏域,猜测是用来做验证
<input type="hidden" name="__VIEWSTATE" value="dDwxNTMxMDk5Mzc0Ozs+lYSKnsl/mKGQ7CKkWFJpv0btUa8=" />
  • Textbox1是上次登陆的用户学号
  • RadioButtonList1通过看源码可知为%D1%A7%C9%FA,是”学生”经过URL编码(gb2312)后的字符串。
  • 后四个为空可以不用管

创建一个类:ConnectJWGL
属性如下:

    private String stuNum;
    private String stuName;
    private String __VIEWSTATE = "";
    private Map<String,String> cookies = new HashMap<>();
    private Connection connection;
    private Connection.Response response;
    private Document document;

2. 获取Cookies和__VIEWSTATE

给主页发一个请求,然后将响应的Cookies保存下来。并在其中提取__VIEWSTATE的值。

在ConnectJWGL类中添加一个connectIndex方法
代码如下:

    //接获取cookies和__VIEWSTATE
    public void connectIndex(){
        try{
            //获取连接
            connection = Jsoup.connect("http://222.24.62.120");
            connection.header("User-Agent",// 配置模拟浏览器
                    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
            response = connection.timeout(3000).execute();
            //保存Cookies
  
  • 10
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
爬取正方教务数据可以使用 Python 中的 requests 库和 BeautifulSoup 库。以下是一个简单的示例代码,可以爬取正方教务系统的成绩数据: ```python import requests from bs4 import BeautifulSoup # 登录信息 username = '你的学号' password = '你的密码' # 构造请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 登录页面 login_url = 'http://jwgl.xxx.edu.cn/default2.aspx' # 获取验证码 captcha_url = 'http://jwgl.xxx.edu.cn/CheckCode.aspx' # 构造会话 session = requests.Session() # 获取登录页面,保存 cookie response = session.get(login_url, headers=headers) # 解析页面,获取 __VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION 等参数 soup = BeautifulSoup(response.text, 'html.parser') view_state = soup.find('input', attrs={'name': '__VIEWSTATE'})['value'] view_state_generator = soup.find('input', attrs={'name': '__VIEWSTATEGENERATOR'})['value'] event_validation = soup.find('input', attrs={'name': '__EVENTVALIDATION'})['value'] # 获取验证码 captcha_response = session.get(captcha_url, headers=headers) with open('captcha.jpg', 'wb') as f: f.write(captcha_response.content) captcha = input('请输入验证码:') # 登录 data = { '__VIEWSTATE': view_state, '__VIEWSTATEGENERATOR': view_state_generator, '__EVENTVALIDATION': event_validation, 'txtUserName': username, 'TextBox2': password, 'txtSecretCode': captcha, 'Button1': '', 'lbLanguage': '', 'hidPdrs': '', 'hidsc': '' } response = session.post(login_url, data=data, headers=headers) # 获取成绩页面 score_url = 'http://jwgl.xxx.edu.cn/xscjcx.aspx?xh=' + username + '&xm=' response = session.get(score_url, headers=headers) # 解析页面,获取成绩信息 soup = BeautifulSoup(response.text, 'html.parser') table = soup.find('table', attrs={'class': 'datelist'}) rows = table.find_all('tr')[1:] for row in rows: columns = row.find_all('td') print(columns[0].text, columns[1].text, columns[3].text) ``` 需要注意的是,每个学校的正方教务系统可能会有不同的登录方式和页面结构,需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值