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联系删除