南通大学java期末_【Java爬虫】爬取南通大学教务处成绩

没使用自动登录,所以获取是比较麻烦。。

1、http://jwgl.ntu.edu.cn/cjcx    进入官网,进行账号密码登录

2、点击全部成绩查询(也一定要点进去,不然cookie不会返回值),按F12进入控制台,找到Network,看到了ScoreAllData.aspx

1d088a202f809dc511b94fa9e61e40f3.png

首先看到Response中能看到返回的json数据,证明我们url找对了。。

944d2f1713b55d11ba780206cecae81c.png

接下来我们需要看request中的数据

ecd3a9b7fd97cae4fd0f2406ef2b03ef.png

可以看到form data中的start和limit,经过测试,我发现limit只有一个20的值,但是start是可以改变的,所以说换页的时候需要更改start的数据。

还有cookie,登录信息的数据是存在cookie里的(应该是),

e2361caff415e354e74070a1e3a3a891.png

获取这个Id的值,用来使用jsoup爬取数据。

3、下面放代码,再进行分析(代码运行的时候,浏览器页面不要关闭,因为是从cookie获取的值,浏览器一关,cookie就 GG)

packagecom;importjava.io.IOException;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importorg.apache.commons.dbutils.QueryRunner;importorg.jsoup.Connection;importorg.jsoup.Jsoup;importorg.jsoup.nodes.Document;importcom.edu.utils.DruidUtils;importcom.google.gson.Gson;importcom.google.gson.reflect.TypeToken;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;public classPost {public static void main(String[] args) throwsSQLException {

List scoreList = new ArrayList<>();try{

scoreList=post(scoreList);

QueryRunner qr= newQueryRunner(DruidUtils.getDatasource());

String sql= "insert into score values(?,?,?,?,?,?,?,?,?,?,?,?)";for(Score s:scoreList) {

qr.update(sql,s.getKcmc(),s.getJsxm(),s.getXq(),s.getXs(),s.getXf(),s.getZpcj(),s.getPscj(),s.getQmcj(),s.getKcsx(),s.getCjid(),s.getKsfsm(),s.getPxcj());

}

}catch(IOException e) {

e.printStackTrace();

}

}public static List post(List scoreList) throwsIOException {//获取请求连接

Connection con = Jsoup.connect("http://jwgl.ntu.edu.cn/cjcx/Data/ScoreAllData.aspx")

.cookie("ASP.NET_SessionId","zogqkp55pbsaysrvbhfapi55")

.referrer("http://jwgl.ntu.edu.cn/cjcx/Main.aspx")

.ignoreContentType(true)

.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36");

Document doc=con.post();

JSONObject jsonObject=JSONObject.fromObject(doc.body().text());

Integer count= (Integer) jsonObject.get("totalCount");for(int i=0;i

con= Jsoup.connect("http://jwgl.ntu.edu.cn/cjcx/Data/ScoreAllData.aspx")

.cookie("ASP.NET_SessionId","zogqkp55pbsaysrvbhfapi55")

.referrer("http://jwgl.ntu.edu.cn/cjcx/Main.aspx")

.ignoreContentType(true)

.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36");

con.data("start",String.valueOf(i));

con.data("limit","20");

Document scores=con.post();

JSONObject scoresObject=JSONObject.fromObject(scores.body().text());

JSONArray jsonArray= scoresObject.getJSONArray("data");

Gson g= newGson();

List ps = g.fromJson(jsonArray.toString(), new TypeToken>(){}.getType());if(ps!=null) {

scoreList.addAll(ps);

}

}returnscoreList;

}

}

Score类是返回data的实体类,用来封装数据。

e0ff4a53fcdc8eecec17ba06b33d30c1.png

通过post方法进行数据的爬取,在Connection对象里进行cookie,userAgent等数据的封装,注意这个cookie里的值是第二步中从控制台获取到cookie值。

使用JsonObject和Gson进行数据的封装,然后再把数据存入本地数据库中。

4da6f582810fd52e0df9c65c063cff08.png

4、在JSP中显示或者导出到Excel

(有空再写)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值