Java:
解析HTML

如何操作:

让我们使用Jsoup,一个用于处理现实世界HTML的便捷库。首先,添加依赖项:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.15.2</version>
</dependency>

现在来到有趣的部分。以下是如何抓取一个网页的标题并打印它:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class HtmlParser {
    public static void main(String[] args) throws IOException {
        String url = "http://example.com";
        Document doc = Jsoup.connect(url).get();
        String title = doc.title();
        System.out.println("标题: " + title);
    }
}

输出:

标题: 示例域名

如何提取所有链接?

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

// ... 在main方法或其他方法中
Elements links = doc.select("a[href]");
for (Element link : links) {
    System.out.println("链接: " + link.attr("href"));
}

深入探讨

曾几何时,HTML被正则表达式模式所驯服,这是一种对复杂文档既容易出错又是噩梦般的方法。随着Jsoup在二零零年代末的出现,为Java提供了类似jQuery的界面来解析、遍历和操作HTML。

Jsoup并非唯一选择。还有HtmlUnit适用于支持JavaScript的完整网络应用测试,但它更加笨重和复杂。对于轻量级任务,Apache Commons Validator非常适合仅提取URLs。

在底层,Jsoup使用了DOM解析器,它将整个文档以树的形式在内存中建模。这种方法使得选择和导航HTML结构变得很容易。另外,它能够容忍杂乱的HTML,在飞行中修复问题以确保稳健的解析。

记住,当进行抓取时,始终检查网站的robots.txt和服务条款,以避免法律麻烦或被IP封禁。

另见

  • Jsoup 官方文档:https://jsoup.org/
  • HtmlUnit:http://htmlunit.sourceforge.net/
  • Apache Commons Validator:https://commons.apache.org/proper/commons-validator/