【Java爬虫】爬取南通大学教务处成绩

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

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

(有空再写)

原文地址:https://www.cnblogs.com/yg1024/p/9385009.html

时间: 2024-08-07 15:13:15

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

Java爬虫爬取 天猫 淘宝 京东 搜索页和 商品详情

Java爬虫爬取 天猫 淘宝 京东 搜索页和 商品详情 先识别商品url,区分平台提取商品编号,再根据平台带着商品编号爬取数据. 1.导包 <!-- 爬虫相关Jar包依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</version> </

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

用java编写的爬虫,使用xpath爬取内容后,发现网页源码中的 全部显示为?(问号),但是使用字符串的replace("?", ""),并不能替换,网上找了一下,大概意思是显示的这个问号其实并不是问号,是乱码,主要是由于编码的问题导致的. 解决方法如下: //替换抓取内容中“ ”变为问号的问题 try { intro = new String(intro.getBytes(),"GBK").replace('?', ' ').replace('

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

近日在做爬虫功能,爬取网页内容,然后对内容进行语义分析,最后对网页打标签,从而判断访问该网页的用户的属性. 在爬取内容时,遇到乱码问题.故需对网页内容编码格式做判断,方式大体分为三种:一.从header标签中获取Content-Type=#Charset:二.从meta标签中获取Content-Type=#Charset:三.根据页面内容分析编码格式. 其中一/二方式并不能准确指示该页面的具体编码方式,周全考虑,加入第三种方式. 第三种方式引入开源jar包info.monitorenter.cp

java爬虫爬取博客园数据

网络爬虫 编辑 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. 网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler).聚焦网络爬虫(Focused Web Crawler).增量式网络爬虫(Incremental Web Crawler).深层网络爬虫(Deep We

java爬虫爬取学校毕设题目

背景 效果 思路 代码准备 依赖(jar包): 建表 代码 java爬虫过程解析 如何解决分页问题 背景 最近很多大四学生问我毕业设计如何选题 “你觉得图书管理系统怎么样?” “导师不让做这个,说太简单” “那你觉得二手交易平台怎么样?” “导师说没新意,都有咸鱼了你做这个有什么意思?要新颖的” “那你觉得个人博客平台的搭建怎么样?” “啥是博客?” “emmmm……在线售票怎么样?” “导师说今年不让选xx管理系统,这些都太简单” “那你觉得做人脸识别或者垃圾自动分类怎么样” “导师说这些太难

Java爬虫爬取京东商品信息

<strong> java<em style="color:red;">爬虫</em></strong>工具:Jsoup Maven地址 <dependency> <!-- jsoup HTML parser library @ https://jsoup.org/ --> <groupId>org.jsoup</groupId> <artifactId>jsoup</ar

用Python爬虫爬取广州大学教务系统的成绩(内网访问)

用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code] 在{}之前的部分就是"选择器"."选择器"指明了{}中的"样式"的作用对象,也就是"样式"作用于网页中的哪些元素.可参考:http://www.w3school.com.cn/cssref/css_selectors.asph

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

python爬虫爬取美女图片

python 爬虫爬取美女图片 #coding=utf-8 import urllib import re import os import time import threading def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImgUrl(html,src): srcre = re.compile(src) srclist = re.findall(srcre,html)