jsoup抓取借书记录
package tushuguan; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set; import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; public class tushuguan {
private static String LoginUrl = "http://222.200.98.171:81/login.aspx";
private static String Host = "http://222.200.98.171:81";
private static String mainUrl = "";
private static String borrowedBooksUrl = "";
private static String cookie = "";
private static String location = ""; /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
getMyBorrowedBooks();
} public static void getMyBorrowedBooks() {
try {
Document document = Jsoup.parse(login());
Elements elements1 = document
.getElementsContainingOwnText("当前借阅情况和续借");// 通过text关键字找到所要的<a>标签
String url = elements1.first().attr("href");
for(int i=1;i<=4;i++){
borrowedBooksUrl = "http://222.200.98.171:81/user/bookborrowedhistory.aspx?page="+i;// 取值和mainUrl进行拼凑组织借阅情况地址
System.out.println("链接如下:"+borrowedBooksUrl);
getBookBorrowedData(getHtml(borrowedBooksUrl));
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 获取借书情况具体数据(List<BookEntity>)
*
* @param src
* @return List<BookEntity>
*/
private static List<BookEntity> getBookBorrowedData(String src) {
List<BookEntity> data = new ArrayList<BookEntity>();
Document document = Jsoup.parse(src);
Element element = document.select("[id=UserMasterRight]").first()
.getElementsByTag("table").first();
Elements elements2 = element.getElementsByTag("tr");
for (Element temp2 : elements2) {
Elements elements3 = temp2.getElementsByTag("td");
BookEntity entity = new tushuguan().new BookEntity()
.setIsFullData(elements3.get(4).text())
.setData2Return(elements3.get(1).text())
.setName(elements3.get(2).text())
.setData2Borrowed(elements3.get(0).text());
data.add(entity); }
data.remove(0);
System.out.println("借书情况\n"); for (BookEntity temp : data) {
System.out.println(temp.getName() + "\n" + temp.getData2Borrowed()
+ "\n" + temp.getData2Return() + "\n"
+ temp.getIsFullData());
}
return data; } /**
* 图书馆登陆
*
* @param context
* @return 返回登陆后的界面Html代码
* @throws ClientProtocolException
* @throws IOException
*/
public static String login() throws ClientProtocolException, IOException {
List<NameValuePair> parmasList = new ArrayList<NameValuePair>();
parmasList = initLoginParmas("3113003802", "092137");
HttpPost post = new HttpPost(LoginUrl);
post.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, false);
// 阻止自动重定向,目的是获取第一个ResponseHeader的Cookie和Location
post.setHeader("Content-Type",
"application/x-www-form-urlencoded;charset=gbk");
// 设置编码为GBK
post.setEntity(new UrlEncodedFormEntity(parmasList, "GBK"));
HttpResponse response = new DefaultHttpClient().execute(post);
cookie = response.getFirstHeader("Set-Cookie").getValue();
// 取得cookie并保存起来
// System.out.println("cookie= " + cookie);
location = response.getFirstHeader("Location").getValue();
// 重定向地址,目的是连接到主页
mainUrl = Host + location;
// 构建主页地址
String html = getHtml(mainUrl);
return html; } /**
* 获取网页HTML源代码
*
* @param url
* @return
* @throws ParseException
* @throws IOException
*/ private static String getHtml(String url) throws ParseException,
IOException {
// TODO Auto-generated method stub
HttpGet get = new HttpGet(url);
if ("" != cookie) {
get.addHeader("Cookie", cookie);
}
HttpResponse httpResponse = new DefaultHttpClient().execute(get);
HttpEntity entity = httpResponse.getEntity();
return EntityUtils.toString(entity);
} /**
* 初始化参数
*
* @param userName
* @param passWord
* @return
* @throws ParseException
* @throws IOException
*/
public static List<NameValuePair> initLoginParmas(String userName,
String passWord) throws ParseException, IOException {
List<NameValuePair> parmasList = new ArrayList<NameValuePair>();
HashMap<String, String> parmasMap = getLoginFormData(LoginUrl);
Set<String> keySet = parmasMap.keySet(); for (String temp : keySet) {
if (temp.contains("Username")) {
parmasMap.put(temp, userName);
} else if (temp.contains("txtPas")) {
parmasMap.put(temp, passWord);
}
} Set<String> keySet2 = parmasMap.keySet();
System.out.println("表单内容:");
for (String temp : keySet2) {
System.out.println(temp + " = " + parmasMap.get(temp));
}
for (String temp : keySet2) {
parmasList.add(new BasicNameValuePair(temp, parmasMap.get(temp)));
} // System.out.println("initParams \n" + parmasMap); return parmasList; } /**
* 获取登录表单input内容
*
* @param url
* @return
* @throws IOException
* @throws ParseException
*/
public static HashMap<String, String> getLoginFormData(String url)
throws ParseException, IOException {
Document document = Jsoup.parse(getHtml(url));
Elements element1 = document.getElementsByTag("form");// 找出所有form表单
Element element = element1.select("[method=post]").first();// 筛选出提交方法为post的表单
Elements elements = element.select("input[name]");// 把表单中带有name属性的input标签取出
HashMap<String, String> parmas = new HashMap<String, String>();
for (Element temp : elements) {
parmas.put(temp.attr("name"), temp.attr("value"));// 把所有取出的input,取出其name,放入Map中
}
return parmas;
} class BookEntity {
/**
* 书名
*
*/
private String name;
/**
* 可借数
*/
private String leandableNum;
/**
* 索引号
*/
private String callNumber;
/**
* 作者
*/
private String writer;
/**
* 出版社
*/
private String publisher;
/**
* 还书时间
*/
private String data2Return;
/**
* 借书时间
*/
private String data2Borrowed;
/**
* 是否续满
*/
private String isFullData; public BookEntity() { } public String getName() {
return name;
} public String getLeandableNum() {
return leandableNum;
} public String getCallNumber() {
return callNumber;
} public String getWriter() {
return writer;
} public String getPublisher() {
return publisher;
} public BookEntity setName(String name) {
this.name = name;
return this;
} public BookEntity setLeandableNum(String leandableNum) {
this.leandableNum = leandableNum;
return this;
} public BookEntity setCallNumber(String callNumber) {
this.callNumber = callNumber;
return this;
} public BookEntity setWriter(String writer) {
this.writer = writer;
return this;
} public BookEntity setPublisher(String publisher) {
this.publisher = publisher;
return this;
} public String getData2Return() {
return data2Return;
} public String getData2Borrowed() {
return data2Borrowed;
} public String getIsFullData() {
return isFullData;
} public BookEntity setData2Return(String data2Return) {
this.data2Return = data2Return;
return this;
} public BookEntity setData2Borrowed(String data2Borrowed) {
this.data2Borrowed = data2Borrowed;
return this;
} public BookEntity setIsFullData(String isFullData) {
this.isFullData = isFullData;
return this;
} } }
结果如下:
表单内容:
__VIEWSTATE = /wEPDwULLTE0MjY3MDAxNzcPZBYCZg9kFgoCAQ8PFgIeCEltYWdlVXJsBRt+XGltYWdlc1xoZWFkZXJvcGFjNGdpZi5naWZkZAICDw8WAh4EVGV4dAUt5bm/5Lic5bel5Lia5aSn5a2m5Zu+5Lmm6aaG5Lmm55uu5qOA57Si57O757ufZGQCAw8PFgIfAQUcMjAxNeW5tDEy5pyIMjHml6UgIOaYn+acn+S4gGRkAgQPZBYEZg9kFgQCAQ8WAh4LXyFJdGVtQ291bnQCCBYSAgEPZBYCZg8VAwtzZWFyY2guYXNweAAM55uu5b2V5qOA57SiZAICD2QWAmYPFQMTcGVyaV9uYXZfY2xhc3MuYXNweAAM5YiG57G75a+86IiqZAIDD2QWAmYPFQMOYm9va19yYW5rLmFzcHgADOivu+S5puaMh+W8lWQCBA9kFgJmDxUDCXhzdGIuYXNweAAM5paw5Lmm6YCa5oqlZAIFD2QWAmYPFQMUcmVhZGVycmVjb21tZW5kLmFzcHgADOivu+iAheiNkOi0rWQCBg9kFgJmDxUDE292ZXJkdWVib29rc19mLmFzcHgADOaPkOmGkuacjeWKoWQCBw9kFgJmDxUDEnVzZXIvdXNlcmluZm8uYXNweAAP5oiR55qE5Zu+5Lmm6aaGZAIID2QWAmYPFQMbaHR0cDovL2xpYnJhcnkuZ2R1dC5lZHUuY24vAA/lm77kuabppobpppbpobVkAgkPZBYCAgEPFgIeB1Zpc2libGVoZAIDDxYCHwJmZAIBD2QWBAIDD2QWBAIBDw9kFgIeDGF1dG9jb21wbGV0ZQUDb2ZmZAIHDw8WAh8BZWRkAgUPZBYGAgEPEGRkFgFmZAIDDxBkZBYBZmQCBQ8PZBYCHwQFA29mZmQCBQ8PFgIfAQWlAUNvcHlyaWdodCAmY29weTsyMDA4LTIwMDkuIFNVTENNSVMgT1BBQyA0LjAxIG9mIFNoZW56aGVuIFVuaXZlcnNpdHkgTGlicmFyeS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuPGJyIC8+54mI5p2D5omA5pyJ77ya5rex5Zyz5aSn5a2m5Zu+5Lmm6aaGIEUtbWFpbDpzenVsaWJAc3p1LmVkdS5jbmRkZBFPBFe3T/k7AJVSx8iKDmNVbdHT
ctl00$ContentPlaceHolder1$txtPas_Lib = 你猜你猜
ctl00$ContentPlaceHolder1$btnLogin_Lib = 登录
ctl00$ContentPlaceHolder1$txtlogintype = 0
ctl00$ContentPlaceHolder1$txtUsername_Lib = 3113003802
__EVENTVALIDATION = /wEWBQKs47i8AwKOmK5RApX9wcYGAsP9wL8JAqW86pcIDebecgohSzUlmvgecvTU4k49zAw=
链接如下:http://222.200.98.171:81/user/bookborrowedhistory.aspx?page=1
借书情况 回乡记 [专著]/贺雪峰主编
2015-09-01
2015-10-15
A3226253
土木工程CAD基础 [专著]:AutoCAD软件基础教程=CAD foundation of civil engineering:AutoCAD software basic course/邓芃主编
2015-07-20
2015-10-15
A3138201
李光耀传 [专著]/凌翔著
2015-07-20
2015-10-15
A3210306
工程CAD基础理论与上机操作习题集 [专著]/于奕峰,杨松林主编
2015-07-20
2015-10-15
A3258522
消失的17岁 [专著]/(美) 诺瓦·伦·苏玛著=17 & gone/Nova Ren Suma;刘丽洁译
2015-06-03
2015-09-01
A3213437
汤姆叔叔的小屋 [专著]=Uncle tom's cabin:插图·中文导读英文版/(美)比彻·斯托夫人著;王勋,纪飞等编译
2015-03-27
2015-06-01
A3002490
商务口译 [专著]=Business interpreting/刘建珠主编
2015-03-27
2015-06-01
A3003500
2014年季度精选集 [汇编]·春季卷/《读者·乡土人文版》编辑部主编
2015-03-27
2015-06-01
A3210150
可口可乐不规则营销 [专著]/(美)洛威尔著;龙文元译
2015-03-17
2015-06-16
A1501833
工程经济学 [专著]/关罡, 郝彤主编
2015-03-17
2015-04-29
A3109697
链接如下:http://222.200.98.171:81/user/bookborrowedhistory.aspx?page=2
借书情况 讴歌母爱 关注人生 [专著]:冰心小说全集/冰 心著
2015-03-03
2015-06-01
A5143376
林徽因小说:九十九度中/林徽因[著];陈学勇编选
2015-03-03
2015-06-01
A5188772
骆驼祥子·黑白李 [专著]/老舍著
2015-03-03
2015-06-01
A0957524
1937年的爱情 [专著]/叶兆言著
2014-11-27
2015-01-10
A1509614
理工大风流往事 [专著]/zt著
2014-11-27
2014-12-16
A1847222
酒殇 [专著]:一个酒业王国的兴衰/杨小凡著
2014-11-27
2015-01-10
A1948680
那时年少 [专著]/一草著
2014-11-27
2014-12-16
A2992422
不能承受的生命之轻 [专著]/(捷克斯洛伐克)米兰·昆德拉(Milan Kundera)著=L'insoutenable legerete de l'etre/许钧译
2014-11-18
2015-01-10
A0520872
读者精华本 [汇编]/万文海主编
2014-11-18
2015-01-10
A1547276
谁在让子弹飞 [专著]/曹保印著
2014-11-18
2014-12-16
A3147373
链接如下:http://222.200.98.171:81/user/bookborrowedhistory.aspx?page=3
借书情况 孤独是不人道的 [专著]/郭鹏著
2014-11-18
2014-12-16
A3147367
且听风吟 [专著]/(日)村上春树著;林少华译
2014-09-23
2014-11-10
A2516969
可怕的巧合 [专著]/石岩编著
2014-09-23
2014-11-13
A3158433
你好,总统 [专著]:乌戈·查韦斯与他的委内瑞拉=Comandante:inside Hugo Chavez's venezuela/(英)洛里·卡洛尔(Rory Carroll)著;徐天鹏译
2014-09-23
2014-11-13
A3129490
肝胆相照 [专著]:吴孟超传/方鸿辉著
2014-09-23
2014-11-10
A3139385
林徽因经典作品 [专著]:你是人间的四月天九十九度中/林徽因著
2014-05-19
2014-07-10
A2386519
梁思成的山河岁月 [专著]/林与舟编著
2014-05-19
2014-05-27
A1210449
人物中国 [汇编]/龚莉主编;《人物中国》编委会编
2014-05-19
2014-07-10
A2603584
百年大案追踪 [专著]/郭学德,崔爱鹏,李海涛著
2014-04-24
2014-06-11
A0283139
聚焦名人名案 [专著]/窦欣平,叶知秋著
2014-04-24
2014-06-11
A0547714
链接如下:http://222.200.98.171:81/user/bookborrowedhistory.aspx?page=4
借书情况 孙子兵法经典故事 [专著]/李济生编著
2014-04-24
2014-06-17
A0565277
危险游戏 [汇编]:典型犯罪案例评说/郭春孚,张翔鹰主编
2014-04-24
2014-06-03
A1360621
家庭常用药物手册 [专著]/白禾夏主编
2014-03-17
2014-03-25
A0483737
药用观赏植物栽培与利用 [专著]/张永清编著
2014-03-17
2014-04-13
A0614935
排毒不如无毒 [专著]:远离生活中的有毒物质/(美) 黛布拉·林恩·戴德著 ;常媛译=Toxic free: how to protect your health and home from the chemicals that are making you sick
2014-03-17
2014-03-25
A3116154
新版以案说法 [专著]/曾宪义总主编
2014-02-27
2014-03-17
A1595640
飞去的诗人:徐志摩传 [专著]/展望之,张方晦著
2014-02-25
2014-03-20
A8152588
高四凶猛 [专著]/耿萧著
2014-02-25
2014-02-27
A0547642
其实我是转载改了点东西而已:http://my.oschina.net/dfsfsdf/blog/116279?fromerr=jQsroe5A
jsoup抓取借书记录的更多相关文章
- jsoup抓取网页内容
java项目有时候我们需要别人网页上的数据,怎么办?我们可以借助第三方架包jsou来实现,jsoup的中文文档,那怎么具体的实现呢?那就跟我一步一步来吧 最先肯定是要准备好这个第三方架包啦,下载地址, ...
- jsoup抓取网页+具体解说
jsoup抓取网页+具体解说 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目.我以前在 IBM DW 上发表过两篇关于 htmlparser 的文章.各自 ...
- Jsoup抓取网页数据完成一个简易的Android新闻APP
前言:作为一个篮球迷,每天必刷NBA新闻.用了那么多新闻APP,就想自己能不能也做个简易的新闻APP.于是便使用Jsoup抓取了虎扑NBA新闻的数据,完成了一个简易的新闻APP.虽然没什么技术含量,但 ...
- Jsoup抓取、解析网页和poi存取excel综合案例——采集网站的联系人信息
需求:采集网站中每一页的联系人信息 一.创建maven工程,添加jsoup和poi的依赖包 <!-- https://mvnrepository.com/artifact/org.apache. ...
- 使用java开源工具httpClient及jsoup抓取解析网页数据
今天做项目的时候遇到这样一个需求,需要在网页上展示今日黄历信息,数据格式如下 公历时间:2016年04月11日 星期一 农历时间:猴年三月初五 天干地支:丙申年 壬辰月 癸亥日 宜:求子 祈福 开光 ...
- HttpClient+Jsoup 抓取网页信息(网易贵金属为例)
废话不多说直接讲讲今天要做的事. 利用HttpClient和Jsoup技术抓取网页信息.HttpClient是支持HTTP协议的客户端编程工具包,并且它支持HTTP协议. jsoup 是一款基于 Ja ...
- 使用jsoup抓取新闻信息
1,jsoup简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和 ...
- HttpClients+Jsoup抓取笔趣阁小说,并保存到本地TXT文件
前言 首先先介绍一下Jsoup:(摘自官网) jsoup is a Java library for working with real-world HTML. It provides a very ...
- 使用Jsoup 抓取页面的数据
需要使用的是jsoup-1.7.3.jar包 如果需要看文档我下载请借一步到官网:http://jsoup.org/ 这里贴一下我用到的 Java工程的测试代码 package com.javen ...
随机推荐
- 你真的说的清楚ArrayList和LinkedList的区别吗
参见java面试的程序员,十有八九会遇到ArrayList和LinkedList的区别?相信很多看到这个问题的人,都能回答个一二.但是,真正搞清楚的话,还得花费一番功夫. 下面我从4个方面来谈谈这个问 ...
- STM32启动文件选择说明
图1. STM32F10xxx标准外设库体系结构先说这个问题,大家都知道,我们在选择使用哪些外围的的时候,是去更改从官方模版中拷贝过来的stm32f10x_conf.h文件的27-48行,把我们要用的 ...
- C++杂谈(一)const限定符与const指针
const限定符 c++有了新的const关键字,用来定义常变量,可以替C语言中的#define.关于const限定符,有以下需要注意: 1.创建后值不再改变 2.作用范围在文件内有效 3.添加ext ...
- nyoj 170 网络的可靠性
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=170 思路:统计每个节点的度,将度为1的节点消去所需要的最少的边即为答案. 代码: #in ...
- 启动rabbitmq web管理后台插件
安装完rabbitmq server之后,访问http://server_ip:15672/ 无法打开网页, 通过netstat -ano |grep 15672 查看此端口号并没有开启 需要启用 ...
- BusyBox Init
嵌入式系统内核启动后的第一个程序就是init,一般位于/sbin/init(一般是符号链接到/bin/busybox), 但有些也会直接放在根目录下如linuxrc,busybox的init不支持多级 ...
- android ndk编译x264开源(用于android的ffmpeg中进行软编码)
http://blog.csdn.net/u012917616/article/details/40921833 不废话,直接上.sh脚本: export NDK=/home/xxx/my_softw ...
- 聚合数据天气预报API-ajax 通过城市名取数据
如需要,可申请聚合数据天气预报API:https://www.juhe.cn/docs/api/id/39,并生成AppKey. 接口地址:http://v.juhe.cn/weather/index ...
- 【Android Demo】悬浮窗体实现
突然对悬浮窗体感兴趣,查资料做了个小Demo,效果是点击按钮后,关闭当前Activity,显示悬浮窗口,窗口可以拖动,双击后消失.效果图如下: 它的使用原理很简单,就是借用了WindowManager ...
- UESTC 914 方老师的分身I Dijkstra
题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...