Java 解析HTML

Java 解析HTML

Java 解析HTML

在开发过程中,我们经常需要解析HTML文档。无论是爬取网页内容还是处理HTML模板,Java都提供了多种解析HTML的方式和工具。本文将介绍几种常用的Java解析HTML的方法和工具,并给出相应的代码示例。

1. Jsoup

Jsoup是一个简洁、灵活和易于使用的HTML解析器,它可以帮助我们从HTML中提取所需的内容。使用Jsoup,我们可以通过CSS选择器来定位HTML元素,并轻松地提取文本、属性以及其他所需的信息。

示例代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupExample {

    public static void main(String[] args) throws Exception {
        String html = "<html><head><title>Jsoup Example</title></head>"
                + "<body><div id='content'>"
                + "<h1>Hello, Jsoup!</h1>"
                + "<p>Jsoup is a Java library for working with real-world HTML.</p>"
                + "</div></body></html>";

        Document doc = Jsoup.parse(html);
        Element contentDiv = doc.getElementById("content");
        Element heading = contentDiv.getElementsByTag("h1").first();
        String text = heading.text();

        System.out.println(text);
    }
}

运行结果:

Hello, Jsoup!

2. HTML Parser

HTML Parser是一个开源的Java库,可以用于解析HTML文档。它遵循DOM模型,将HTML解析为树状结构,方便我们对节点进行迭代和操作。HTML Parser支持XPath查询,可以根据节点的属性和内容进行定位。

示例代码:

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class HtmlParserExample {

    public static void main(String[] args) throws ParserException {
        String html = "<html><head><title>HTML Parser Example</title></head>"
                + "<body><div id='content'>"
                + "<h1>Hello, HTML Parser!</h1>"
                + "<p>HTML Parser is a Java library for parsing HTML.</p>"
                + "</div></body></html>";

        Parser parser = new Parser(html);
        NodeFilter filter = new TagNameFilter("h1");
        NodeList nodeList = parser.extractAllNodesThatMatch(filter);

        for (Node node : nodeList.toNodeArray()) {
            String text = node.toPlainTextString();
            System.out.println(text);
        }
    }
}

运行结果:

Hello, HTML Parser!

3. Xsoup

Xsoup是基于Jsoup的扩展库,为我们提供了更便捷的方式来解析和提取HTML中的数据。它支持XPath查询,可以通过XPath表达式来选择和提取所需的HTML元素。

示例代码:

import us.codecraft.xsoup.Xsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class XsoupExample {

    public static void main(String[] args) {
        String html = "<html><head><title>Xsoup Example</title></head>"
                + "<body><div id='content'>"
                + "<h1>Hello, Xsoup!</h1>"
                + "<p>Xsoup is an extension library of Jsoup for extracting data from HTML using XPath expression.</p>"
                + "</div></body></html>";

        Document doc = Jsoup.parse(html);
        String text = Xsoup.compile("//h1").evaluate(doc).get();
        System.out.println(text);
    }
}

运行结果:

Hello, Xsoup!

4. HtmlUnit

HtmlUnit是一个用于模拟浏览器行为的Java库,它可以加载并解析HTML文档,并执行其中的JavaScript代码。因此,HtmlUnit不仅可以用于解析静态HTML文档,还可以用于解析动态生成的HTML内容。

示例代码:

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class HtmlUnitExample {

    public static void main(String[] args) throws Exception {
        WebClient client = new WebClient();
        HtmlPage page = client.getPage("https://www.example.com");

        String content = page.asText();
        System.out.println(content);
    }
}

运行结果:

Example Domain

This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.

More information...

5. NekoHTML

NekoHTML是一个轻量级的HTML解析器,可以将HTML转换为DOM树的形式,方便我们对HTML进行解析和处理。NekoHTML也支持XPath查询,可以根据XPath表达式来选择和提取所需的HTML元素。

示例代码:

import org.apache.xerces.parsers.DOMParser;
import org.cyberneko.html.HTMLConfiguration;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class NekoHtmlExample {

    public static void main(String[] args) throws Exception {
        DOMParser parser = new DOMParser();
        HTMLConfiguration config = new HTMLConfiguration();
        parser.setFeature("http://cyberneko.org/html/features/balance-tags", true);
        parser.setProperty("http://cyberneko.org/html/properties/names/elems", "lower");
        parser.setProperty("http://cyberneko.org/html/properties/names/attrs", "lower");
        parser.setEntityResolver(config.getEntityResolver());

        parser.parse("https://www.example.com");

        Document doc = parser.getDocument();
        NodeList nodeList = doc.getElementsByTagName("title");
        Node node = nodeList.item(0);
        String text = node.getTextContent();

        System.out.println(text);
    }
}

运行结果:

Example Domain

总结

本文介绍了几种常用的Java解析HTML的方法和工具,包括Jsoup、HTML Parser、Xsoup、HtmlUnit和NekoHTML。这些工具提供了不同的解析方式和查询语法,可以根据具体需求选择合适的工具。使用这些工具,我们可以方便地从HTML文档中提取所需的信息,完成各种HTML解析任务。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程