使用DOM方法遍历文档
问题
想要从HTML文档中提取数据(通常是了解该HTML文档结构的)。
解决方案
在将HTML解析成Document
后使用类似于操作DOM的方法。
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
Element content = doc.getElementById("content");
Element links = doc.getElementByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}
描述
Elements对象提供一系列类似于操作DOM的方法来查找元素、提取和操作其中的数据。DOM getters方法是上下文相关的,在父级DOM上调用可以获取到文档下对应匹配的元素;在子级元素上调用可以获取到子元素下的元素。可以通过这种方式筛选出想要的数据。
查找元素:
getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key)
(和相关的方法)- 相邻元素获取:
siblingElements()
、firstElementSibling()
、lastElementSibling()
、nextElementSibling()
、previousElementSibling()
- 谱系:
parent()
、children()
、child(int index)
操作元素中的数据
- 获取属性:
attr(String key)
;设置属性:attr(String key, String value)
- 获取所有属性:
attributes()
id()
,className()
,classNames()
- 获取文本内容:
text()
;设置文本内容:text(String value)
- 获取元素内HTML:
html()
;设置元素内HTML:html(String value)
- 获取元素外部HTML:
outerHtml()
- 获取数据内容:
data()
(e.g.script
和style
标签) tag()
、tagName()
操作HTML和文本内容
append(String html)
、prepend(String html)
appendText(String text)
、prependText(String text)
appendElementt(String tagName)
、prependElement(String tagName)
html(String html)