一、前言
jsoup 是一款Java 的HTML解析器,我们使用它可直接解析URL地址、HTML文本内容。除此之外,它提供了一套非常友好的API,使得我们可以比较便利的通过DOM,CSS等操作类型,获取对应网页元素属性及数据操作。
jsoup官网:https://jsoup.org/
二、核心功能
2.1、功能描述
① 从一个URL,文件或字符串中解析HTML
② 使用DOM或CSS选择器来查找、取出数据使用DOM或CSS选择器来查找、取出数据
③ 可操作HTML元素、属性、文本可操作HTML元素、属性、文本
Tips:jsoup是基于MIT协议发布的,可放心使用于商业项目
2.2、Maven地址
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
三、核心API
6个包提供用于开发jsoup应用程序的类和接口。
org.jsoup
org.jsoup.examples
org.jsoup.helper
org.jsoup.nodes
org.jsoup.parser
org.jsoup.safety
org.jsoup.salect
主要类:
Jsoup 类提供了连接,清理和解析HTML文档的方法
Document 获取HTML文档
Element 获取、操作HTML节点
四、实例代码
4.1、三种加载HTML的方法
public static void main(String[] args) {
/* 从URL加载HTML */
Document document = Jsoup.connect("http://www.baidu.com").get();
String title = document.title();
/* 获取html中的标题 */
System.out.println("title :"+title);
/* 从字符串加载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);
title = doc.title();
System.out.println("title :"+title);
/* 从文件加载HTML */
doc = Jsoup.parse(new File("F:\\jsoup\\html\\index.html"),"utf-8");
title = doc.title();
System.out.println("title :"+title);
}
4.2、获取html中的head、body、url等信息
public static void main(String[] args) {
Document document = Jsoup.connect("http://www.baidu.com").get();
String title = document.title();
System.out.println("title :"+title);
/* 获取html中的head */
System.out.println(document.head());
/* 获取html中的body */
/* 获取HTML页面中的所有链接 */
Elements links = document.select("a[href]");
for (Element link : links){
System.out.println("link : "+ link.attr("href"));
System.out.println("text :"+ link.text());
}
}
4.3、获取URL的元信息
public static void main(String[] args) {
Document document = Jsoup.connect("https://passport.lagou.com").get();
System.out.println(document.head());
/* 获取URL的元信息 */
String description = document.select("meta[name=description]").get(0).attr("content");
System.out.println("Meta description : " + description);
String keywords = document.select("meta[name=keywords]").first().attr("content");
System.out.println("Meta keyword : " + keywords);
}
4.4、根据class名称获取表单
public static void main(String[] args) {
Document document = Jsoup.connect("https://baidu.com").get();
/* 获取拉勾网登入页面的body */
/* System.out.println(document.body()); */
/* 根据class名称获取表单 */
Elements formElement = document.getElementsByClass("form_body");
System.out.println(formElement.html());
/* 获取URL的元信息 */
for (Element inputElement : formElement) {
String placeholder = inputElement.getElementsByTag("input").attr("placeholder");
System.out.println(placeholder);
}
}
4.5、提取并打印表单参数
public static void main(String[] args) {
Document document = Jsoup.parse(new File("F:\\jsoup\\html\\login.html"),"utf-8");
Element loginform = document.getElementById("registerform");
Elements inputElements = loginform.getElementsByTag("input");
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = inputElement.attr("value");
System.out.println("Param name: "+key+" -- Param value: "+value);
}
}
4.6、设置元素的html内容
public static void main(String[] args) {
Document document = Jsoup.parse(new File("F:\\jsoup\\html\\index.html"),"utf-8");
System.out.println(document.body());
System.out.println("*************");
Element div = document.select("div").first();
div.html("<p>Hello</p>");
div.prepend("<p>Fiest</p>");
div.append("<p>Last</p>");
System.out.println(document.body());
System.out.println(div.text());
/* 对元素包裹一个外部HTML内容 */
div.wrap("<div id=\"div2\"></div>");
System.out.println(document.body());
}
4.7、设置元素的文本内容
public static void main(String[] args) {
Document document = Jsoup.parse(new File("F:\\jsoup\\html\\index.html"),"utf-8");
System.out.println(document.body());
Element div = document.select("div").first();
div.text("7 > 8 ");
div.prepend("Fiest ");
div.append("Last ");
System.out.println(document.body());
System.out.println(div.text());
}