敞开成长之旅!这是我参与「日新计划 12 月更文挑战」的第15天,点击查看活动概况
Jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它供给了一套非常省力的API,可经过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
一、Jsoup的主要功能
-
从一个URL,文件或字符串中解析HTML
-
运用DOM或CSS选择器来查找、取出数据
-
可操作HTML元素、特点、文本
-
依据安全的白名单清理用户提交的内容,以防止XSS攻击
-
输出整齐的HTML
二、Jsoup的主要类
1. org.jsoup.Jsoup类
Jsoup类是任何Jsoup程序的进口点,并将供给从各种来历加载和解析HTML文档的方法。
static Connection connect(String url) | 创立并回来URL的衔接。 |
---|---|
static Document parse(File in, String charsetName) | 将指定的字符集文件解析成文档。 |
static Document parse(String html) | 将给定的html代码解析成文档。 |
static String clean(String bodyHtml, Whitelist whitelist) | 从输入HTML回来安全的HTML,经过解析输入HTML并经过答应的标签和特点的白名单进行过滤。 |
2. org.jsoup.nodes.Document类
该类表明经过Jsoup库加载HTML文档。能够运用此类履行适用于整个HTML文档的操作。
3. org.jsoup.nodes.Element类
HTML元素是由标签称号,特点和子节点组成。 运用Element类,您能够提取数据,遍历节点和操作HTML。
三、Jsoup运用
1.maven引入
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
2.加载文档
Document document = Jsoup.connect("http://www.yiibai.com").get();
Document document = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );```
String html = "<html><head><title>First</title></head><body><p>Parsed</p></body></html>";
Document document = Jsoup.parse(html);
3.解析文档
- 依据id查询元素 getElementById
- 依据标签获取元素 getElementsByTag
- 依据class获取元素 getElementsByClass
- 依据特点获取元素 getElementsByAttribute
// 解析文件,获取doc目标
Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
// 1,依据id查询元素 getElementById
Element element1 = doc.getElementById("people");
// 2,依据标签获取元素 getElementsByTag
Element element2 = doc.getElementsByTag("span").first();
// 3,依据class获取元素 getElementsByClass
Element element3 = doc.getElementsByClass("").first();
// 4,依据特点获取元素 getElementsByAttribute
Element element4 = doc.getElementsByAttribute("").last();
// 依据特点和特点值获取 Element element5 = doc.getElementsByAttributeValue("abc","123").last();
4.运用选择器获取元素
selector选择器概述
- tagname:经过标签查找元素,比方:span
- #id:经过ID查找元素,比方:#myqxin
- .class:经过class称号查找元素,比方:class_a
- [attribute]:利用特点查找元素,比方:[abc]
- [attr=value]:利用特点值查询元素,比方:[class=s_name]
- ns|tag: 经过标签在命名空间查找元素,比方:能够用 fb|name 语法来查找 fb:name 元素
- [attr^=value], [attr$=value], [attr*=value]: 利用匹配特点值最初、结尾或包括特点值来查找元素,比方:[href*=/path/]
- [attr~=regex]: 利用特点值匹配正则表达式来查找元素,比方: img[src~=(?i).(png|jpe?g)]
- *: 这个符号将匹配一切元素
Selector选择器组合运用
- el#id: 元素+ID,比方: div#logo
- el.class: 元素+class,比方: div.masthead
- el[attr]: 元素+class,比方: a[href]
- 任意组合,比方:a[href].highlight
- ancestor child: 查找某个元素下子元素,比方:能够用.body p 查找在”body”元素下的一切 p元素
- parent > child: 查找某个父元素下的直接子元素,比方:能够用div.content > p 查找 p 元素,也能够用body > * 查找body标签下一切直接子元素
- siblingA + siblingB: 查找在A元素之前第一个同级元素B,比方:div.head + div
- siblingA ~ siblingX: 查找A元素之前的同级X元素,比方:h1 ~ p
- el, el, el:多个选择器组合,查找匹配任一选择器的仅有元素,例如:div.masthead, div.logo
伪选择器selectors
- :lt(n): 查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比方:td:lt(3) 表明小于三列的元素
- :gt(n):查找哪些元素的同级索引值大于n,比方: div p:gt(2)表明哪些div中有包括2个以上的p元素
- :eq(n): 查找哪些元素的同级索引值与n持平,比方:form input:eq(1)表明包括一个input标签的Form元素
- :has(seletor): 查找匹配选择器包括元素的元素,比方:div:has(p)表明哪些div包括了p元素
- :not(selector): 查找与选择器不匹配的元素,比方: div:not(.logo) 表明不包括 class=”logo” 元素的一切 div 列表
- :contains(text): 查找包括给定文本的元素,搜索不区别大不写,比方: p:contains(jsoup)
- :containsOwn(text): 查找直接包括给定文本的元素
- :matches(regex): 查找哪些元素的文本匹配指定的正则表达式,比方:div:matches((?i)login)
- :matchesOwn(regex): 查找本身包括文本匹配指定正则表达式的元素
- 留意:上述伪选择器索引是从0开端的
5. 处理元素数据
-
attr(String key)
获取和attr(String key, String value)
设置特点 -
attributes()
取得一切特点 -
id()
,className()
和classNames()
-
text()
获取和text(String value)
设置文本内容 -
html()
获取和html(String value)
设置内部HTML内容 -
outerHtml()
获取外部HTML值 -
data()
获取数据内容(例如script
和style
标签) -
tag()
和tagName()
6.操作HTML和文本
-
append(String html)
,prepend(String html)
-
appendText(String text)
,prependText(String text)
-
appendElement(String tagName)
,prependElement(String tagName)
html(String value)
7.从元素中提取特点,文本和HTML
在解析文档并找到一些元素之后,您将需求获取这些元素中的数据。
Element.id()
Element.tagName()
-
Element.className()
和Element.hasClass(String className)