博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java爬虫】爬取南通大学教务处成绩
阅读量:5831 次
发布时间:2019-06-18

本文共 2632 字,大约阅读时间需要 8 分钟。

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

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

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

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

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

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

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

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

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

package com;import java.io.IOException;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.jsoup.Connection;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import com.edu.utils.DruidUtils;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class Post {    public static void main(String[] args) throws SQLException {        List
scoreList = new ArrayList<>(); try { scoreList = post(scoreList); QueryRunner qr = new QueryRunner(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) throws IOException { // 获取请求连接 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
ps = g.fromJson(jsonArray.toString(), new TypeToken
>(){}.getType()); if(ps!=null) { scoreList.addAll(ps); } } return scoreList; }}

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

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

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

 

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

 (有空再写)

 

转载于:https://www.cnblogs.com/yg1024/p/9385009.html

你可能感兴趣的文章
ASP.NET中 HTML标签总结及使用
查看>>
Linux下日志系统的设计
查看>>
爬虫IP被禁的简单解决方法——切换UserAgent
查看>>
php生成word,并下载
查看>>
紫书 习题8-11 UVa 1615 (区间选点问题)
查看>>
asp.net mvc学习(Vs技巧与Httpcontext)
查看>>
float数据在内存中是怎么存储的
查看>>
dedecms 修改标题长度可以修改数据库
查看>>
Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)
查看>>
MySQL案列之主从复制出错问题以及pt-slave-restart工具的使用
查看>>
测试人员容易遗漏的隐藏缺陷
查看>>
maven+SpringMVC搭建RESTful后端服务框架
查看>>
一本书的摘录
查看>>
重排序(转载)
查看>>
python+selenium之字符串切割操作
查看>>
串结构练习——字符串匹配
查看>>
linux下输入密码不回显
查看>>
《构建之法》读书笔记
查看>>
拿下阿里、头条、滴滴的offer后谈谈面试经验---动身前看一看
查看>>
android开发(49) android 使用 CollapsingToolbarLayout ,可折叠的顶部导航栏
查看>>