JSOUP
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
主要功能:
-
从一个URL,文件或字符串中解析HTML;
-
使用DOM或CSS选择器来查找、取出数据;
-
可操作HTML元素、属性、文本;
-
jsoup是基于MIT协议发布的,可放心使用于商业项目。
依赖关系:
-
jsoup完全是自包含的,没有依赖性。
-
jsoup可在Java 7及更高版本,Scala,Kotlin,Android,OSGi,Lambda和Google App
Engine上运行。
Maven和 jar下载位置
------解析HTML文档-------
//html
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
//解析得到DOM
Document doc = Jsoup.parse(html);
解析器将尽一切努力从您提供的HTML创建干净的解析,无论HTML的格式是否正确。它处理:
- 未关闭的标签 (
例如,<p>Lorem <p>Ipsum解析为<p>Lorem</p> <p>Ipsum</p>
) - 隐式标签 (
例如,将裸体<td>Table data</td>包裹在中<table><tr><td>...
) - 可靠地创建文档结构(
html包含head和body,并且头部中仅包含适当的元素
)
从元素中提取属性,文本和HTML
String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
Document doc = Jsoup.parse(html);
Element link = doc.select("a").first();
String text = doc.body().text(); // "An example link"
String linkHref = link.attr("href"); // "http://example.com/"
String linkText = link.text(); // "example""
String linkOuterH = link.outerHtml();
// "<a href="http://example.com"><b>example</b></a>"
String linkInnerH = link.html(); // "<b>example</b>"
其他Api:
Element.id()
Element.tagName()
Element.className() 和 Element.hasClass(String className)
从网上获取并解析HTML文档,然后在其中查找数据(屏幕抓取)
Jsoup.connect(String url)
获取示例域
Document doc = Jsoup.connect("http://example.com/").get();
String title = doc.title();
该connect(String url)方法创建一个new Connection,并get()获取并解析一个HTML文件。如果在提取网址时发生错误,则会抛出一个IOException,您应该适当地处理它。
—实例—
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupString {
public static void main(String[] args) {
Document doc;
try {
doc = Jsoup.connect("https://www.chrisyoung777.com").get();
String title = doc.title();
System.out.println(title);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//控制台输出
Hi.man
数据修改
- 设置属性值
Elements 提供了批量操作元素属性和class的方法,比如:要为div中的每一个a元素都添加一个 rel=“nofollow” 可以使用如下方法:
- 设置元素的html内容
Element div = doc.select("div").first(); // <div></div>
div.html("<p>lorem ipsum</p>"); // <div><p>lorem ipsum</p></div>
div.prepend("<p>First</p>");//在div前添加html内容
div.append("<p>Last</p>");//在div之后添加html内容
// 添完后的结果: <div><p>First</p><p>lorem ipsum</p><p>Last</p></div>
Element span = doc.select("span").first(); // <span>One</span>
span.wrap("<li><a href='http://example.com/'></a></li>");
// 添完后的结果: <li><a href="http://example.com"><span>One</span></a></li>
- 设置元素的文本内容
Element div = doc.select("div").first(); // <div></div>
div.text("five > four"); // <div>five > four</div>
div.prepend("First ");
div.append(" Last");
// now: <div>First five > four Last</div>