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

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<Score> 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<Score> post(List<Score> 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<count;i+=20) {
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 = new Gson();
List<Score> ps = g.fromJson(jsonArray.toString(), new TypeToken<List<Score>>(){}.getType());
if(ps!=null) {
scoreList.addAll(ps);
}
}
return scoreList;
}
}

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

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

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

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

(有空再写)

【Java爬虫】爬取南通大学教务处成绩的更多相关文章

  1. [python爬虫]爬取学校教务处成绩

    学校教务处网站 登陆窗口 表单数据 观察登陆窗口和提交的表单数据可知只要将账号.密码.验证码正确赋值提交即可模拟登陆. 账号和密码都有,问题的关键就在验证码上. 右键验证码图片审查观察源码如下图: 刚 ...

  2. 一个简单java爬虫爬取网页中邮箱并保存

    此代码为一十分简单网络爬虫,仅供娱乐之用. java代码如下: package tool; import java.io.BufferedReader; import java.io.File; im ...

  3. Java爬虫爬取网站电影下载链接

    之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...

  4. java爬虫爬取的html内容中空格(&nbsp;)变为问号“?”的解决方法

    用java编写的爬虫,使用xpath爬取内容后,发现网页源码中的 全部显示为?(问号),但是使用字符串的replace("?", ""),并不能替换,网上找了一 ...

  5. java爬虫爬取网页内容前,对网页内容的编码格式进行判断的方式

    近日在做爬虫功能,爬取网页内容,然后对内容进行语义分析,最后对网页打标签,从而判断访问该网页的用户的属性. 在爬取内容时,遇到乱码问题.故需对网页内容编码格式做判断,方式大体分为三种:一.从heade ...

  6. java爬虫爬取资源,小白必须会的入门代码块

    java作为目前最火的语言之一,他的实用性也在被无数的java语言爱好者逐渐的开发,目前比较流行的爬取资源,用java来做也更简单一些,下面是爬取网页上所有手机型号,参数等极为简便的数据 packag ...

  7. 用Java爬虫爬取凤凰财经提供的沪深A股所有股票代号名称

    要爬取的凤凰财经网址:http://app.finance.ifeng.com/list/stock.php?t=hs 本作主要采用的技术是jsoup,相关介绍网页:https://www.jians ...

  8. java爬虫爬取https协议的网站时,SSL报错, java.lang.IllegalArgumentException TSLv1.2 报错

    目前在广州一家小公司实习,这里的学习环境还是挺好的,今天公司从业十几年的大佬让我检查一下几年前的爬虫程序是否还能使用…… 我从myeclipse上check out了大佬的程序,放到workspace ...

  9. Java爬虫爬取京东商品信息

    以下内容转载于<https://www.cnblogs.com/zhuangbiing/p/9194994.html>,在此仅供学习借鉴只用. Maven地址 <dependency ...

随机推荐

  1. Linux负载均衡利器(LVS)

    LVS是什么? LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之 ...

  2. 使用virtualenv发布Python程序

    客户环境不能上网,开始想把所有依赖包下载下来,进入客户环境进行安装.但为了避免出差,部署工作交给其他同事了,我想还是需要更简单的方式. 实验了一下virtualenv是可以的 1. 创建一个新的环境( ...

  3. WPF基础之Grid面板

    一.显示 Grid的线条,设置ShowGridLiens="True".

  4. java_List接口

    /** * java.util.list接口 extends Collection接口 * 1.有序的集合 * 2.有索引 * 3.元素可以重复 * * List中带索引的方法: *add:添加 * ...

  5. Carthage使用

    # carthage 包管理 ## 安装过程 1) 安装homebrew ``` ruby$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githu ...

  6. Codeforces Round #479 (Div. 3) 题解 977A 977B 977C 977D 977E 977F

    A. Wrong Subtraction 题目大意:   定义一种运算,让你去模拟 题解:   模拟 #include <iostream> #include <cstdio> ...

  7. SDOI2018Round1 && 九省联考 爆炸记

    Day 0 做了一上午火车,大概中午十二点左右到了烟台核电培训中心宾馆,宾馆蛮不错的,跟我在北京参加英才论坛时住的宾馆舒适程度上差不多. 下午花式颓颓颓,吃了晚饭(体验一般)去试机,听说用Lemon评 ...

  8. 廖雪峰Java11多线程编程-2线程同步-4wait和notify

    wait和notify synchronized解决了多线程竞争的问题 我们可以在synchronized块中安全的对一个变量进行修改,但是它没有解决多线程协调的问题. 例如设计一个TaskQueue ...

  9. CSS中关于多个class样式设置的不同写法

    html中: <div class="containerA"> 这是AAAAAAAAAAAAAAAAAAAAAAA样式 <div class="cont ...

  10. 关于Spring Cloud Feign的一些记录!

    学习Spring Cloud Feign过程中,相关资料都会反复强调:微服务调用的话(@FeignClient)  客户端方法的返回值和服务端方法的返回值还有方法名之类的都是要求一致的! 关于方法名是 ...