如何解析一个HTML文档:
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
(更详细内容可查看 解析一个HTML字符串.)
其解析器能够尽最大可能从你提供的HTML文档来创见一个干净的解析结果,无论HTML的格式是否完整。比如它可以处理:
- 没有关闭的标签 (比如:
<p>Lorem <p>Ipsumparses to<p>Lorem</p> <p>Ipsum</p>) - 隐式标签 (比如. 它可以自动将
<td>Table data</td>包装成<table><tr><td>?) - 创建可靠的文档结构(html标签包含head 和 body,在head只出现恰当的元素)
一个文档的对象模型
- 文档由多个Elements和TextNodes组成 (以及其它辅助nodes:详细可查看:nodes package tree).
- 其继承结构如下:
Document继承Element继承Node.TextNode继承Node. - 一个Element包含一个子节点集合,并拥有一个父Element。他们还提供了一个唯一的子元素过滤列表。
数据抽取
你有一个HTML文档,你想从中提取数据。而且你知道一般的HTML文档的结构。可用类似dom方法解析HTML文档。
1 /** 2 * 获取htmlElement元素 3 * @author bling 4 * @throws IOException 5 * @create Date:2014-07-13 6 */ 7 @Test 8 public void getDataElement() throws IOException{ 9 File input = new File("tmp/input.html"); 10 Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); 11 12 Element content = doc.getElementById("content"); 13 Elements links = content.getElementsByTag("a"); 14 for(Element link : links){ 15 String linkHref = link.attr("href"); 16 String linkText = link.text(); 17 System.out.println("linkHref:"+linkHref+"------"+"linkText:"+linkText); 18 } 19 }
Elements 提供类似查找Element的方法,并可提取操作数据,DOM对象为上下文:根据父亲Document查找匹配之下的document,并根据找到的document查找其下的孩子元素,使用这种方式可查找你想要的数据。
- 获取Elements的方法
getElementById(String id)getElementsByTag(String tag)getElementsByClass(String className)-
getElementsByAttribute(String key)(and related methods) - Element siblings:
siblingElements(),firstElementSibling(),lastElementSibling();nextElementSibling(),previousElementSibling() - Graph:
parent(),children(),child(int index)
- 获取Element数据的方法
-
attr(String key)to get andattr(String key, String value)to set attributes -
attributes()to get all attributes -
id(),className()andclassNames() -
text()to get andtext(String value)to set the text content -
html()to get andhtml(String value)to set the inner HTML content -
outerHtml()to get the outer HTML value -
data()to get data content (e.g. ofscriptandstyletags) -
tag()andtagName()
- 操作html和text的方法
-
append(String html),prepend(String html) -
appendText(String text),prependText(String text) -
appendElement(String tagName),prependElement(String tagName) html(String value)
- 数据抽取:Selector syntax(使用选择器语法,参考)
GitHub例子代码:https://github.com/Java-Group-Bling/Jsoup-learn