Jsoup 示例指南
                           
天天向上
发布: 2024-12-21 13:55:21

原创
965 人浏览过

Jsoup 是一个非常流行的 Java 库,用于解析 HTML 文档、处理网页内容和进行网页抓取。它提供了强大的 HTML 解析能力,并支持类似 jQuery 的 DOM 操作接口,适用于网页内容提取、修改以及 HTML 元素操作等任务。以下是详细的 Jsoup 示例指南,涵盖了常见的使用场景和功能。帮助你更好地理解如何使用该库。


1. 基本的 HTML 解析

示例:解析 HTML 字符串

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

public class JsoupParseExample {
    public static void main(String[] args) {
        String html = "<html><head><title>Sample Page</title></head>"
                    + "<body><p>Hello, World!</p></body></html>";

        // 解析 HTML 字符串
        Document doc = Jsoup.parse(html);

        // 获取标题
        System.out.println("Title: " + doc.title()); // 输出: Sample Page

        // 获取 <p> 标签中的文本
        System.out.println("Paragraph: " + doc.select("p").text()); // 输出: Hello, World!
    }
}

2. 从 URL 解析 HTML

示例:从网站加载 HTML

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

import java.io.IOException;

public class JsoupFromURLExample {
    public static void main(String[] args) {
        try {
            // 连接到 URL 并抓取 HTML 内容
            Document doc = Jsoup.connect("https://example.com").get();

            // 打印页面标题
            System.out.println("Title: " + doc.title());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 选择元素和获取文本

示例:选择特定元素并获取其文本

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

public class JsoupSelectElements {
    public static void main(String[] args) {
        String html = "<html><body><p class='intro'>Hello</p><p>World</p></body></html>";

        // 解析 HTML
        Document doc = Jsoup.parse(html);

        // 选择并打印具有 class 'intro' 的 <p> 标签文本
        System.out.println("Intro Paragraph: " + doc.select(".intro").text()); // 输出: Hello

        // 选择所有 <p> 标签并打印
        doc.select("p").forEach(p -> {
            System.out.println("Paragraph: " + p.text());
        });
        // 输出:
        // Intro Paragraph: Hello
        // Paragraph: World
    }
}

4. 获取和修改属性值

示例:获取和修改 HTML 元素的属性

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

public class JsoupAttributesExample {
    public static void main(String[] args) {
        String html = "<html><body><a href='https://example.com' class='link'>Click Here</a></body></html>";

        Document doc = Jsoup.parse(html);

        // 获取 <a> 标签的 href 属性
        Element link = doc.select("a").first();
        System.out.println("Link Href: " + link.attr("href")); // 输出: https://example.com

        // 修改 <a> 标签的 href 属性
        link.attr("href", "https://new-example.com");
        System.out.println("Updated Link Href: " + link.attr("href")); // 输出: https://new-example.com
    }
}

5. 修改 HTML 元素内容

示例:修改 HTML 标签的内容

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

public class JsoupModifyContent {
    public static void main(String[] args) {
        String html = "<html><body><p id='message'>Original message</p></body></html>";

        Document doc = Jsoup.parse(html);

        // 获取并修改 <p> 标签的文本
        Element p = doc.getElementById("message");
        p.text("Updated message");

        // 输出修改后的 HTML
        System.out.println(doc.html()); // 输出: <html><body><p id="message">Updated message</p></body></html>
    }
}

6. 删除元素

示例:删除页面中的元素

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

public class JsoupRemoveElement {
    public static void main(String[] args) {
        String html = "<html><body><p>This is a paragraph.</p><p class='remove'>Remove this one</p></body></html>";

        Document doc = Jsoup.parse(html);

        // 删除具有 'remove' 类名的 <p> 标签
        doc.select(".remove").remove();

        // 输出修改后的 HTML
        System.out.println(doc.html()); // 输出: <html><body><p>This is a paragraph.</p></body></html>
    }
}

7. 遍历 HTML 元素

示例:遍历并操作多个元素

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

public class JsoupIterateExample {
    public static void main(String[] args) {
        String html = "<html><body><p>First paragraph</p><p>Second paragraph</p></body></html>";

        Document doc = Jsoup.parse(html);

        // 遍历所有 <p> 标签并输出文本内容
        for (Element p : doc.select("p")) {
            System.out.println("Paragraph: " + p.text());
        }
        // 输出:
        // Paragraph: First paragraph
        // Paragraph: Second paragraph
    }
}

8. 抓取带表格的 HTML

示例:抓取并解析 HTML 表格数据

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

public class JsoupTableParsing {
    public static void main(String[] args) {
        String html = "<html><body><table>"
                    + "<tr><th>Name</th><th>Age</th></tr>"
                    + "<tr><td>John</td><td>25</td></tr>"
                    + "<tr><td>Jane</td><td>30</td></tr>"
                    + "</table></body></html>";

        Document doc = Jsoup.parse(html);

        // 获取所有表格行
        Elements rows = doc.select("table tr");

        // 遍历每一行,输出表格数据
        for (Element row : rows) {
            Elements cols = row.select("td");
            if (!cols.isEmpty()) {
                System.out.println(cols.get(0).text() + " is " + cols.get(1).text() + " years old.");
            }
        }
        // 输出:
        // John is 25 years old.
        // Jane is 30 years old.
    }
}

9. 处理 HTTP Cookies 和 User-Agent

示例:设置 Cookie 和 User-Agent

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

import java.io.IOException;

public class JsoupWithCookies {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("https://example.com")
                            .cookie("user", "JohnDoe")  // 设置 cookie
                            .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64)")  // 设置 User-Agent
                            .get();

        // 打印页面标题
        System.out.println("Page Title: " + doc.title());
    }
}

10. 异步请求和超时设置

示例:设置连接超时

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

import java.io.IOException;

public class JsoupTimeoutExample {
    public static void main(String[] args) {
        try {
            // 设置连接超时时间(单位:毫秒)
            Document doc = Jsoup.connect("https://example.com")
                                .timeout(5000)  // 设置5秒超时
                                .get();

            // 输出网页标题
            System.out.println("Page Title: " + doc.title());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

  • 解析 HTML: 使用 Jsoup.parse() 来解析 HTML 字符串,或使用 Jsoup.connect() 从 URL 获取 HTML。
  • 选择元素: 使用 select() 方法根据 CSS 选择器选择元素,类似于 jQuery 的语法。
  • 修改内容: 使用 text()html()attr() 等方法来修改 HTML 元素的内容或属性。
  • 操作表格和列表: 可以轻松提取表格数据和其他有序列表数据。
  • 抓取网页: Jsoup 可以与网络请求结合,抓取并解析网页内容,还支持设置 HTTP headers、cookies 和 timeout 等。

这些示例涵盖了 Jsoup 中的常见操作,Jsoup 是一个非常强大的工具,在处理 HTML 和网页抓取时提供了很多便利的功能。你可以根据需要选择合适的方法来解析、修改和操作 HTML 内容。

发表回复 0

Your email address will not be published. Required fields are marked *