Java HTML 解析器——Jsoup
banner 2021-11-07 22:54:04 爬虫jsoup
# 一、Java HTML 解析器
jsoup是一个基于Java的库,用于处理基于HTML的内容。 它提供了一个非常方便的API来提取和操作数据,使用最好的DOM,CSS和类似jquery的方法。 它实现了WHATWG HTML5规范,并将HTML解析为与现代浏览器相同的DOM。
jsonp库提供以下功能。
- Multiple Read Support - 它使用URL,文件或字符串读取和解析HTML。
- CSS Selectors - 它可以使用DOM遍历或CSS选择器查找和提取数据。
- DOM Manipulation - 它可以操作HTML元素,属性和文本。
- Prevent XSS attacks - 它可以针对给定的安全白名单清除用户提交的内容,以防止XSS攻击。
- Tidy - 它输出整洁的HTML。
- Handles invalid data - jsoup可以处理未关闭的标记,隐式标记并可以可靠地创建文档结构。
# 二、解析为Document对象。
# 2.1 解析URL
Document doc = Jsoup.connect("https://www.baidu.com").get();
1
Document doc = Jsoup.parse(new URL("https://www.baidu.com"), 3000);
1
# 2.2 解析HTML文本
String html = "<html>\n" +
"<head>\n" +
" <title>Java HTML 解析器</title>\n" +
"</head>\n" +
"<body>\n" +
"</body>\n" +
"</html>";
Document doc = Jsoup.parse(html);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2.3 解析文件
Document doc = Jsoup.parse(new File("./src/test/resources/static", "index.html"), "utf-8");
1
# 三、使用DOM方式
将HTML文件解析为Document对象后展示DOM方法的使用。
示例文件(index.html) (opens new window)
# 3.1 根据id查询元素getElementById
doc.getElementById("test")
1
# 3.2 根据标签获取元素getElementsByTag
doc.getElementsByTag("title")
1
# 3.3 根据class获取元素getElementsByClass
doc.getElementsByClass("s_name")
1
# 3.4 根据属性获取元素getElementsByAttribute
doc.getElementsByAttribute("href")
1
# 3.5 根据属性以及属性值获取元素getElementsByAttributeValue
doc.getElementsByAttributeValue("href", "https://sh.itcast.cn"))
1
🤔 补充:获取到元素后,如果获取对应的值呢?
final Element element = doc.getElementById("test");
assert element != null;
//1.从元素中获取id
System.out.println(element.id());
//2.从元素中获取className
System.out.println(element.className());
//3.从元素中获取属性的值attr
System.out.println(element.attr("id"));
//4.从元素中获取所有属性attributes
System.out.println(element.attributes());
//5.从元素中获取文本内容text
System.out.println(element.text());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 四、使用Selector方法
# 4.1 tagName: 通过标签查找元素,比如:span
doc.select("span")
1
# 4.2 #id: 通过ID查找元素,比如:#city_bj
doc.select("#city_bj")
1
# 4.3 .class: 通过class名称查找元素,比如:.class_a
doc.select(".class_a")
1
# 4.4 [attribute]: 利用属性查找元素,比如:[abc]
doc.select("[abc]")
1
# 4.5 [attr=value]: 利用属性值来查找元素,比如:[abc=123]
doc.select("[abc=123]")
1
# 4.6 el#id: 元素+ID,比如: h3#city_bj
doc.select("h3#city_bj")
1
# 4.7 el.class: 元素+class,比如: li.class_a
doc.select("li.class_a")
1
# 4.8 el[attr]: 元素+属性名,比如: span[abc]
doc.select("span[abc]")
1
# 4.9 任意组合: 比如:span[abc].s_name
doc.select("span[abc].s_name")
1
# 4.10 ancestor child: 查找某个元素下子元素,比如:.city_con li 查找"city_con"下的所有li
doc.select(".city_con li")
1
# 4.11 parent > child: 查找某个父元素下的直接子元素,比如:.city_con > ul > li 查找city_con第一级(直接子元素)的ul,再找所有ul下的第一级li
doc.select(".city_con > ul > li")
1
# 4.12 parent > *: 查找某个父元素下所有直接子元素
doc.select(".city_con > *")
1
- 一、Java HTML 解析器
- 二、解析为Document对象。
- 2.1 解析URL
- 2.2 解析HTML文本
- 2.3 解析文件
- 三、使用DOM方式
- 3.1 根据id查询元素getElementById
- 3.2 根据标签获取元素getElementsByTag
- 3.3 根据class获取元素getElementsByClass
- 3.4 根据属性获取元素getElementsByAttribute
- 3.5 根据属性以及属性值获取元素getElementsByAttributeValue
- 四、使用Selector方法
- 4.1 tagName: 通过标签查找元素,比如:span
- 4.2 #id: 通过ID查找元素,比如:#city_bj
- 4.3 .class: 通过class名称查找元素,比如:.class_a
- 4.4 [attribute]: 利用属性查找元素,比如:[abc]
- 4.5 [attr=value]: 利用属性值来查找元素,比如:[abc=123]
- 4.6 el#id: 元素+ID,比如: h3#city_bj
- 4.7 el.class: 元素+class,比如: li.class_a
- 4.8 el[attr]: 元素+属性名,比如: span[abc]
- 4.9 任意组合: 比如:span[abc].s_name
- 4.10 ancestor child: 查找某个元素下子元素,比如:.citycon li 查找"citycon"下的所有li
- 4.11 parent > child: 查找某个父元素下的直接子元素,比如:.citycon > ul > li 查找citycon第一级(直接子元素)的ul,再找所有ul下的第一级li
- 4.12 parent > *: 查找某个父元素下所有直接子元素