[java] jsoup使用简介-汇率换算器实现-插曲2
[java] jsoup使用简介-汇率换算器实现-插曲2
[java] jsoup使用简介-汇率换算器实现-插曲2
Table of Contents
2 更多参考资料
3 解释遍历一个html文档和html字符串
传送门 http://www.open-open.com/jsoup/parsing-a-document.htm http://www.open-open.com/jsoup/parse-document-from-string.htm
原文中给出的例子如下:
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
单单这个示例, 就引出了以下问题:
- 能够直接运行吗?
- 直接输出Document的结果?
3.1 运行环境设置及运行
下载jsoup.jar包, 将其放置到yourpath, 编写代码的时候具体import的内容, 应该根据jsoup的tree 进行import, 如上面的例子中使用了 Jsoup 和 Document, 那么在文件的开头就应该有这样两句话:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
剩下的完整的内容如下:
// 再简单地将示例放入main函数中
public class JsoupDemo{
public static void main(String[] args)
throws Exception {
// Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
String html = "<html><head><title>First parse</title><head>"
+ "<body><p>Parsed Html into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
System.out.println(doc);
}
}
3.2 直接输出Document
编译运行如下(linux):
javac -classpath yourpath/jsoup.jar JsoupDemo.java
java -cp yourpath/jsoup.jar:./ JsoupDemo
最后可以发现通过parse处理后输出地结果为格式化后的html代码:
<html>
<head>
<title>First parse</title>
</head>
<body>
<p>Parsed Html into a doc.</p>
</body>
</html>
3.3 parse(String html, String baseUri)中baseUri具体指什么
如在html中出现了相对路径, 如 href="page/a.html", 那么就会被解析为 href="$baseUri/page/a.html" 如将示例进行修改为:
String html = "<html><head><title><a href=\"/page/a.html\">标题</a></title></head></html>"
然后调用:
Document doc = Jsoup.parse(html, "http://example.com/");
最后输出的doc依然和String html相同. 那么这个额外的baseUri是怎么起作用的呢. google了一下, 参见: stackoverflow中的解释 , 可见需要下述的方式才能够起作用:
for (Element link : doc.select("a")) {
System.out.println(link.absUrl("href"));
}
4 解释一个body片断
传送门 http://www.open-open.com/jsoup/parse-body-fragment.htm
Jsoup.parseBodyFragment 方法可以将字符串中的<html><head>标签忽略, 剩下的内容都为body部份. 可以将示例中的String html改为下面的方式, 并比较两者之间不同的输出结果:
String html = "<html><head><title>what</title></head><body><div><p>Lorem ipsum.</p></body></html>";
5 从一个URL, 文件加载一个Document对象
传送门 http://www.open-open.com/jsoup/load-document-from-url.htm http://www.open-open.com/jsoup/load-document-from-file.htm
通过以下尝试, 得知Jsoup在connect过程中, 已经对html文档的相应的编码方式进行了处理:
Document doc = Jsoup.connect("http://www.baidu.com/").get();
System.out.println(doc)
6 其他更多文档中的内容请参见
7 其中常用的数据结构简介
7.1 Element
html的element包括形如: <tag attribute="" id="" class="">text</tag> 的部份.
常用的方法有:
- attr: 获得相应属性的内容
- getElementsBy{many different kinds}: 获取不同类型的集合
- text: 获取这个元素以及子集所包含的文本
- 其他参见: http://jsoup.org/apidocs/org/jsoup/nodes/Element.html
7.2 Elements
表示结构相同的element的集合
常用的方法:
- 对element进行遍历:
Elements eles = ...;
for (Element ele : eles) {} 对elements进行遍历 - select: 选择相应结构的elements
- get: 获取特定index的element
- 其他参见: http://jsoup.org/apidocs/org/jsoup/select/Elements.html
Date: 2014-05-14 Wed
Author: Zhong Xiewei
Org version 7.8.11 with Emacs version 24
[java] jsoup使用简介-汇率换算器实现-插曲2的更多相关文章
- [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3
[java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 // */ // ]]> [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 Table of C ...
- [java] 汇率换算器实现-插曲1-正则表达式(1)
[java] 汇率换算器实现-插曲1-正则表达式(1) // */ // ]]> // */ // ]]> [java] 汇率换算器实现-插曲1-正则表达式(1) Table of C ...
- [java] 更好的书写equals方法-汇率换算器的实现(4)
[java] 更好的书写equals方法-汇率换算器的实现(4) // */ // ]]> [java] 更好的书写equals方法-汇率换算器的实现(4) Table of Content ...
- [java] 汇率换算器实现(3)
[java] 汇率换算器实现(3) // */ // ]]> [java] 汇率换算器实现(3) Table of Contents 1 系列文章地址 2 前言 3 提取简单表单信息 3.1 ...
- [java] 汇率换算器实现(2)
[java] 汇率换算器实现(2) // */ // ]]> // */ // ]]> [java] 汇率换算器实现(2) Table of Contents 1 系列文章地址 2 前 ...
- [java] 汇率换算器实现(1)
[java] 汇率换算器实现(1) // */ // ]]> [java] 汇率换算器实现(1) Table of Contents 1 问题描述 2 类设计 3 初步实现 3.1 建立项目 ...
- 【菜鸟学Python】案例一:汇率换算
汇率换算V1.0 案例描述: 设计一个汇率换算器程序,其功能是将外币换算成人民币,或者相反 案例分析: 分析问题:分析问题的计算部分: 确定问题:将问题划分为输入.处理及输出部分: 设计算法:计算部分 ...
- 汇率换算自然语言理解功能JAVA DEMO
>>>>>>>>>>>>>>>>>>>>>>>> 欢迎转 ...
- 万航单位换算器 V1.0 绿色版
软件名称: 万航单位换算器软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 347KB图片预览: 软件简介:万航单位换算器是一个可以随意转换单位的绿色软件,这个软件 ...
随机推荐
- Spring对Quartz的封装实现简单需注意事项
前段时间在项目中一直使用正常的Quartz突然出现了任务漏跑的情况,由于我以前看过Quartz的内部实现,凭借记忆我觉得是由于Quartz的线程池的使用出现问题导致了故障的发生.为了搞清问题的真相,我 ...
- [leetcode 37]sudoku solver
1 题目: 根据给出的数独,全部填出来 2 思路: 为了做出来,我自己人工做了一遍题目给的数独.思路是看要填的数字横.竖.子是否已经有1-9的数字,有就剔除一个,最后剩下一个的话,就填上.一遍一遍的循 ...
- ORACLE10g创建表空间,角色与授权
创建基础表空间,创建用户,授权. -- CREATE TABLESPACE CREATE TABLESPACE TS_JK_LAB_BASIC DATAFILE 'D:\TOOLS\ORACLE\PR ...
- 关于MySQL的在线扩容
原文地址:http://bucketli.iteye.com/blog/1294032 主要简单总结下,mysql在线扩容和缩容一般涉及到的内容,主要包括三个方面,1.在线也就意味着需要把增量的数据重 ...
- dijit样式定制之TextBox(一)
参考资料:http://dojotoolkit.org/reference-guide/1.9/dijit/themes.html http://archive.dojotoolkit.org/nig ...
- C语言#自动生成四则运算的编程
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> ...
- 从点击Button到弹出一个MessageBox, 背后发生了什么
思考一个最简单的程序行为:我们的Dialog上有一个Button, 当用户用鼠标点击这个Button时, 我们弹出一个MessageBox. 这个看似简单的行为, 谁能说清楚它是如何运行起来的,背后究 ...
- XP之后Windows的一些变化
看到很多Windows开发人员,尤其是C++程序员思维还是停留在XP操作系统,当然根据工作是否需要新知识 ,这本身没有错.但是实际上Vista之后的Win7, 再之后的Win8 ,Windows已经发 ...
- [PCB制作] 1、记录一个简单的电路板的制作过程——四线二项步进电机驱动模块(L6219)
前言 现在,很多人手上都有一两个电子设备,但是却很少有人清楚其中比较关键的部分(PCB电路板)是如何制作出来的.我虽然懂点硬件,但是之前设计的简单系统都是自己在万能板上用导线自己焊接的(如下图左),复 ...
- 手把手教你用python打造网易公开课视频下载软件4-图形化界面
上一篇讲解完函数:def getdownLoadInfo (url): 传入公开课的url地址,就可以提取课程的信息,这一篇讲解一下如何编写图像化界面.大概思考一下图像化界面需要的内容: (1)一个标 ...