敞开成长之旅!这是我参与「日新计划 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.解析文档

  1. 依据id查询元素 getElementById
  2. 依据标签获取元素 getElementsByTag
  3. 依据class获取元素 getElementsByClass
  4. 依据特点获取元素 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()获取数据内容(例如scriptstyle标签)
  • 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)