看到过一篇文章介绍爬虫,想着可以用爬虫上教务网爬取期末成绩,利用闲着的时间仔细研究了一下Java爬虫,发现网上很少用Java写爬虫,很多都是python,没有接触过这个语言,不做过多的评价。通过进一步的查询得到一个重要的信息,Java有一个专门处理网页源代码的类,这不就是写爬虫的重点吗,通常Java写爬虫用到的有Jsoup解析网页源代码。

对于需要登录才能访问数据的网站,一般情况下,当登录上网站的时候,用户会获取一个cookie,之后访问每个网页都会带着cookie,验证是否是该用户登录,可以获得数据。

刚刚开始爬取教务网的时候,登录就是个难题,一般登录的时候,访问的网址后面会带着用户名和密码,但是登录的时候只是一个网址,后来通过浏览器的查看元素的功能(博主用的是火狐浏览器,谷歌也可以)分析出,登录的时候,其实是带着好几个消息访问,其中就有用户名密码,通过查看登录网页的源代码,知道了表单输入框的name属性值,一切就迎刃而解了,只需要在登录的网址后面加上name属性值就可以登录进去。弄清楚登陆的时候,向下进行的时候走了很多的弯路,最后才弄明白,需要带着cookie,通过查看浏览器提供的消息,看到每次访问时候,都会带着cookie,我们用Java提供的类,获取到cookie,这样访问的时候服务器就可以验证用户登录了。利用好浏览器观察每次访问的网址。

本项目成型于一个月前,之前爬了所有学期成绩,经过修改变成了查本学期的。

jsoup-1.7.3.jar 下载:http://download.csdn.net/detail/qq_38663729/9909625

用到了一个Degree实体类,存科目名称和成绩

package demo_select;public class Degree {public String name;public String degree;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDegree() {return degree;}public void setDegree(String degree) {this.degree = degree;}@Override
    public String toString() {return "Degree{" +"name='" + name + '\'' +", degree='" + degree + '\'' +'}';}
}

下面的代码,我会把网址去掉,提供的只是一个思路,其实爬虫重要的是分析,利用好浏览器查看每次访问的网址,以及访问的时候带着的信息,其实不难。

package demo_select;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;public class Ben {public static void main(String[] args) throws UnsupportedEncodingException,IOException {Scanner sc = new Scanner(System.in);System.out.println("请输入学号:");String zjh = sc.next();
        // String mm = sc.next();
        // 带着用户名密码获取cookie,否则后面的网页不能验证,报空指针
        String surl = "http://*****************?zjh=" + zjh+ "&mm=*******";// 创建url对象,就是可以理解打开网址
        URL url = new URL(surl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 获取cookie,由于网站不知道什么bug后面总是跟一个分号和path,所以截取
        int i = (connection.getHeaderField("Set-Cookie")).indexOf(";");
//        System.out.println(connection.getHeaderField("Set-Cookie"));
        String cookieVal = (String) (connection.getHeaderField("Set-Cookie")).subSequence(0, i);// System.out.println(cookieVal);
        // 带着cookie打开成绩的网页
        String s = "http://60.219.165.24/bxqcjcxAction.do";// 重新打开一个连接
        url = new URL(s);HttpURLConnection resumeConnection = (HttpURLConnection) url.openConnection();if (cookieVal != null) {// 发送cookie信息上去,以表明自己的身份,否则会被认为没有权限
            resumeConnection.setRequestProperty("Cookie", cookieVal);}resumeConnection.connect();// 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。
        InputStream urlStream = resumeConnection.getInputStream();// 由于网站html代码中有中文,所以不能使用字节流,转换成字符流处理
        InputStreamReader u = new InputStreamReader(urlStream);int j = 0;StringBuffer str = new StringBuffer();while ((j = u.read()) != -1) {str.append((char) j);}/**
         * 利用Jsoup解析html网页,Jsoup可以打开一个网页获取html代码解析,也可以直接解析网页html的字符串
         * 用Jsoup类中的选择方法筛选标签
         *
         */
        String html = str.toString();Document doc = Jsoup.parse(html);Elements links = doc.select("tr[class]");// 解析成节点数组遍历筛选符合条件的标签,取值
        List list = null;Set<String> set = new HashSet<String>();for (Element link : links) {//一个节点的所有孩子节点是一个集合
            list = link.childNodes();for (int i1 = 0; i1 < list.size(); i1++) {//通过解析网页源代码得到的每个节点前面或者后面都带有不相关的字符床,需要截取
                Degree d = new Degree();String name = list.get(5).toString();String degree = list.get(13).toString();int begin = name.indexOf(">");int end = name.lastIndexOf("<");int begin1 = degree.indexOf(">");int end1 = degree.lastIndexOf("<");d.setName(name.substring(begin, end));d.setDegree(degree.substring(begin1 + 1, end1));set.add(d.toString());}}for (String string : set) {System.out.println(string);}}
}

转载于:https://www.cnblogs.com/duzhentong/p/7816596.html

简单的爬虫爬取教务网获取成绩相关推荐

  1. python爬虫爬猎聘网获取多条职责描述中有Linux需求的招聘信息

    python爬虫爬猎聘网获取多条职责描述中有Linux需求的招聘信息 下列是我爬虫的作业 摘 要 随着现代化社会的飞速发展,网络上巨大信息量的获取给用户带来了许多的麻烦.由于工作和生活节奏的需求,人们 ...

  2. 简单python爬虫爬取游戏wiki立绘

    简单python爬虫爬取游戏wiki立绘 玩二次元手游是感叹美少女立绘真好看啊,可惜就是抽不到,于是看到b站wiki上有角色立绘,就写了个爬虫准备将立绘趴下来欣赏(舔). 本人爬虫的技术只算是初学,代 ...

  3. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  4. python爬虫爬取知网

    python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...

  5. python简单网站爬虫-爬取北京7天最高、最低气温

    python简单网站爬虫-爬取北京7天最高.最低气温 前置操作: 1.待爬取网站: 北京天气的网址: http://www.weather.com.cn/weather1d/101010100.sht ...

  6. 在当当买了python怎么下载源代码-python爬虫爬取当当网

    [实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...

  7. [python爬虫]爬取天气网全国所有县市的天气数据

    [python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...

  8. python爬虫爬取东方财富网股票走势+一些信息

    一.目标 我们的目标是爬取东方财富网(https://www.eastmoney.com/)的股票信息 我的目标是爬取100张股票信息图片 经过实际测试我的爬取范围为000001-000110,000 ...

  9. Python爬虫爬取东方财富网的股票信息

    简单的Python爬虫应用 目标:爬取东方财富网的股票信息 1.先找到要爬取的网页 2.第二步开始爬取信息 2.1 通过requests获取网页信息 2.2再通过BeautifulSoup解析: 2. ...

  10. Python 爬虫第三步 -- 多线程爬虫爬取当当网书籍信息

    XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我 ...

最新文章

  1. 湖北孝感计算机职称考试,2015湖北职称计算机考试报名:孝感职称计算机报名入口...
  2. 训练作用_我们口才训练微信群有哪些重要作用?
  3. 编译linux内核报错‘make menuconfig‘ requires the ncurses libraries
  4. 一个页面区分管理者和普通用户如何设计_电商系统:优惠券原型设计说明(二)...
  5. CO-ACT物料分类账
  6. 接地脚是什么意思_帮个忙老铁们 急急急!!!什么叫相地接错并缺地。?_天涯问答_天涯社区...
  7. Linux经典书籍推荐-转
  8. 只要学会它,再多 Bug 也不怕
  9. mysql查询一个月未登录_mysql函数实例-统计1周内未登陆的用户
  10. 一、linux驱动实验-14.1-imx6ull驱动MT7601
  11. ps的cc版本安装包以及破解包
  12. STM32CubeMX | 36 - 使用CAN总线进行双板通信(TJA1050)
  13. CSS——很多让p变红的方法
  14. 大学英语B116-完形填空
  15. Address localhost:1099 is already in use
  16. 构建宽带城域网的基本技术与方案
  17. oracle 两种优化器,Oracle的优化器有两种优化方式(一)
  18. Windows微信聊天图片文件的解码和图片、视频占满电脑磁盘空间的清理
  19. 聚焦企业安全核心问题 WOT技术峰会再扬风帆
  20. Windows 10资源管理器经常无故自动重启

热门文章

  1. mysql-5.7.12安装
  2. FastDFS单机搭建以及java客户端Demo
  3. C#读取excel 找不到可安装的ISAM
  4. 怎样读取html控件(如文本框)的值
  5. python(十一)接口开发、写日志、发邮件、python来发请求、手动添加环境变量...
  6. Unable to locate Spring NamespaceHandler for XML schema namespace
  7. PHP常用设计模式汇总
  8. Handsontable 自定义菜单 自定义命令存放位置
  9. System.IO.Path 操作
  10. 为什么所有浏览器的userAgent都带Mozilla