Java 解析 HTML 的常用方法有两种:一是使用 Jsoup 库,二是使用 Java 自带的 DOM 解析器,下面分别介绍这两种方法。

(图片来源网络,侵删)
1、使用 Jsoup 库
Jsoup 是一个用于处理 HTML 的 Java 库,它可以非常方便地解析、提取和操作 HTML 文档,首先需要添加 Jsoup 依赖到项目中,如果使用 Maven,可以在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
然后可以使用以下代码解析 HTML:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Main {
public static void main(String[] args) {
String html = "<html><head><title>示例网页</title></head>"
+ "<body><p>这是一个 <a href=\'https://www.example.com\'>示例网站</a>。</p></body></html>";
// 解析 HTML
Document document = Jsoup.parse(html);
// 获取标题
String title = document.title();
System.out.println("标题: " + title);
// 获取所有段落元素
Elements paragraphs = document.select("p");
for (Element paragraph : paragraphs) {
System.out.println("段落: " + paragraph.text());
}
// 获取所有链接元素
Elements links = document.select("a[href]");
for (Element link : links) {
System.out.println("链接: " + link.attr("href"));
System.out.println("文本: " + link.text());
}
}
}
2、使用 Java 自带的 DOM 解析器
Java 自带的 DOM(Document Object Model)解析器可以解析 HTML,但使用起来相对繁琐,首先需要创建一个 DocumentBuilderFactory 实例,然后使用它创建一个 DocumentBuilder 实例,最后使用 DocumentBuilder 实例解析 HTML,以下是一个简单的示例:
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class Main {
public static void main(String[] args) {
String html = "<html><head><title>示例网页</title></head>"
+ "<body><p>这是一个 <a href=\'https://www.example.com\'>示例网站</a>。</p></body></html>";
try {
// 创建 DocumentBuilderFactory 实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 创建 DocumentBuilder 实例
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析 HTML
Document document = builder.parse(new InputSource(new StringReader(html)));
document.getDocumentElement().normalize(); // 规范化文档结构,提高性能并减少内存消耗
// 获取标题
String title = document.getDocumentElement().getAttribute("title");
System.out.println("标题: " + title);
// 获取所有段落元素
NodeList paragraphs = document.getElementsByTagName("p");
for (int i = 0; i < paragraphs.getLength(); i++) {
Node node = paragraphs.item(i);
if (node instanceof Element) { // 确保节点是元素类型,避免错误信息输出到控制台
Element element = (Element) node;
System.out.println("段落: " + element.getTextContent());
} else { // 如果节点不是元素类型,直接跳过,避免错误信息输出到控制台
continue;
}
}
// 获取所有链接元素
NodeList links = document.getElementsByTagName("a");
for (int i = 0; i < links.getLength(); i++) {
Node node = links.item(i);
if (node instanceof Element) { // 确保节点是元素类型,避免错误信息输出到控制台
Element element = (Element) node;
System.out.println("链接: " + element.getAttribute("href"));
System.out.println("文本: " + element.getTextContent());
} else { // 如果节点不是元素类型,直接跳过,避免错误信息输出到控制台
continue;
}
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace(); // 如果发生异常,输出堆栈跟踪信息到控制台,便于调试和排查问题,在实际应用中,应该使用日志记录器替代 printStackTrace()。
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/440306.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除