在上一篇利用jsoup解析个人信息----图书馆client,获得个人基本信息后。便有了进一步的需求:获取当前借阅的具体信息

获取的方法还是一样的。利用jsoup解析借阅信息页面,获得所需数据,封装成LendBookInfo,然后将其增加一个List中。

借阅信息详情页例如以下:

模拟get请求得到其html字符串。代码较简单

/**
*获取当前借阅信息。 必须在login()调用之后
*
* @return
*/
public static String getCurLendInfo() {
String curLendInfo = null; /**
*
* location----------- /patroninfo~S3*chx/1****82/top
*
* 目标-------------/patroninfo~S3*chx/1****82/items
*
* tem_location----/patroninfo~S3*chx/1****82
*
*
*/
HttpGet httpget = null;
String tem_location = location.substring(0, location.lastIndexOf("/"));
System.out.println("tem_location---->" + tem_location); try {
httpget = new HttpGet(baseUrl + tem_location + "/items");
response = httpclient.execute(httpget);// 发送get请求 int code = response.getStatusLine().getStatusCode();
System.out.println(response.getStatusLine());
if (code == 200) {
if (response != null) {
curLendInfo = EntityUtils.toString(response.getEntity(),
HTTP.UTF_8);
}
}
} catch (ClientProtocolException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace();
} return curLendInfo; }

得到html后。便能够利用jsoup进行解析。

打开firedebug。进行分析。

代码例如以下:

	/**
* 获取借阅的数目信息
*
* @param lendInfoHtml
* 借阅信息详情html
* @return 借阅信息列表
*/
public static List<LendBookInfo> getLendBookInfos(String lendInfoHtml) { List<LendBookInfo> lendBookInfos = new ArrayList<>();
Document document = Jsoup.parse(lendInfoHtml);
Element table = document.getElementsByClass("patFunc").get(0);// 表格
Elements items = table.getElementsByClass("patFuncEntry");// 数目信息集合
for (Element item : items) { LendBookInfo bookInfo = null; Element ele_title = item.getElementsByClass("patFuncTitle").get(0);// 题名
String bookDetail = ele_title.child(0).text(); Element ele_barCode = item.getElementsByClass("patFuncBarcode")
.get(0);// 条形码
String barCode = ele_barCode.text(); Element ele_status = item.getElementsByClass("patFuncStatus")
.get(0);// 状态
String status = ele_status.text(); Element ele_callNumber = item.getElementsByClass("patFuncCallNo")
.get(0);// 索书号
String callNumber = ele_callNumber.text(); bookInfo = new LendBookInfo(bookDetail, callNumber, status, barCode);
lendBookInfos.add(bookInfo);
}
return lendBookInfos; }

測试例如以下:

public static void main(String[] args) {

		boolean isConn = LibraryUtil.login(stuNo, password);

		/**
* 若登陆成功则将信息保存到数据库(学号、密码须要加密)。 */
if (isConn) {
String resultHtml = LibraryUtil.getResultHtml();
UserInfo userInfo = UserInfoHandler.getUserInfo(resultHtml);
userInfo.setStuNo(stuNo);
userInfo.setPassword(password);
System.out.println("========");
System.out.println(userInfo.toString()); String lendInfoHtml = LibraryUtil.getCurLendInfo();
List<LendBookInfo> lendBookInfos = UserInfoHandler
.getLendBookInfos(lendInfoHtml);
for (LendBookInfo bookInfo : lendBookInfos) {
System.out.println(bookInfo);
}
}
}

測试结果:

待续……

获取个人借阅信息---图书馆client的更多相关文章

  1. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

  2. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

  3. # Linux Whois3获取 运营商信息

    Linux Whois3获取 运营商信息 APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信息也是对外公开的,并提供了一个查询工具,下面就让我们看看如何在Linux ...

  4. 测试框架httpclent 3.获取cookie的信息,然后带cookies去发送请求

    在properties文件里面: startupWithCookies.json [ { "description":"这是一个会返回cookies信息的get请求&qu ...

  5. 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息

    0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...

  6. 小白学react之网页获取微信用户信息

    通过上一篇<小白学react之EJS模版实战>我们学习了怎样通过EJS模版生成我们高定制化的index.html文件. 本篇我们将会继续延续我们的alt-tutorial项目的实战计划.去 ...

  7. php获取YouTube视频信息的方法

    YouTube的视频地址格式https://www.youtube.com/watch?v=[VIDEO_ID]例子:https://www.youtube.com/watch?v=psvkyf3Pz ...

  8. sql 2012中获取表的信息,包含字段的描述

    1.获取数据库中的表 select name from sysobjects where type='U' 2.获取表字段(此处是Route表) Select name from syscolumns ...

  9. ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,

    一.命名空间(主要是为了实现自动加载类) *命名空间(相当于虚拟的目录),为了让类有一个统一的文件夹来管理(可以自动加载'类'),每个文件都要有命名空间*tp如何做命名空间:*TP框架下有一个初始命名 ...

随机推荐

  1. Import Example Dataset

    Overview The examples in this guide use the restaurants collection in the test database. The followi ...

  2. pandas groupby 分组操作

    最一般化的groupby 方法是apply. tips=pd.read_csv('tips.csv') tips[:5] 新生成一列 tips['tip_pct']=tips['tip']/tips[ ...

  3. R语言写简单线性回归

    library(MASS) library(ISLR) lm.fit <- lm(medv~lstat,data=Boston) attach(Boston) lm.fit = lm(medv~ ...

  4. [AGC018 B] Sports Festival 解题报告

    题目链接:https://agc018.contest.atcoder.jp/tasks/agc018_b 题目: 题目大意: 有N个人参加M个体育项目,每个人对体育项目的喜爱程度有一个排名,A[i] ...

  5. 3339: Rmq Problem

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1269  Solved: 665[Submit][Status][Discuss] Descripti ...

  6. python3.x学习笔记3(基础知识)

    1.集合集合是一个无序的,不重复的数据组合,作用如下: >>去重,把一个列表变成集合,就自动去重 >>关系测试,测试两组数据之前的交集.差集.并集等关系 2.关系运算 交集: ...

  7. js parseFloat 精度问题

    <script type="text/javascript"> //parseFloat function actionoftext(){var price = 10. ...

  8. EasyUI--Alert()

    1.$.messager.alert(title, msg, icon, fn) 2 <script type="text/javascript"> $(functio ...

  9. Host status showing red icon in chronograph, Chronograf主机列表页显示主机状态为红色标志

    刚开始全部装好的时候主机显示的状态是绿色的,过了些日子我再打开看的时候就变成红色的了,点击主机进去查看的时候没有了图表数据,大概是这样子的, 在influxdb数据库主机上执行命令curl " ...

  10. POJ2104 K-th Number(线段树,二分,vector)

    题意 不带修改区间第k小.(n<=100000) 题解 建立线段数和vector数组(vector为当前区间排列之后的序列)(归并) 然后对于每一个询问二分答案. 问题就转化为区间有多少数小于等 ...