Jsoup怎么解析HTML?

wen python案例 1

本文目录导读:

Jsoup怎么解析HTML?

  1. 添加依赖
  2. 解析 HTML 的三种方式
  3. 提取数据的基本操作
  4. 完整示例:爬取新闻标题
  5. 常用 API 汇总
  6. 注意事项

Jsoup 是一个 Java 库,用于解析、提取和操作 HTML 文档,以下是使用 Jsoup 解析 HTML 的完整指南:

添加依赖

Maven

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

Gradle

implementation 'org.jsoup:jsoup:1.17.2'

解析 HTML 的三种方式

从 URL 直接解析

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
Document doc = Jsoup.connect("https://example.com")
    .userAgent("Mozilla/5.0")
    .timeout(5000)
    .get();

从 HTML 字符串解析

String html = "<html><head><title>示例</title></head><body><p>Hello World</p></body></html>";
Document doc = Jsoup.parse(html);

从本地文件解析

File input = new File("/path/to/file.html");
Document doc = Jsoup.parse(input, "UTF-8");

提取数据的基本操作

获取元素文本内容

// 获取特定元素文本
String text = doc.body().text();
// 获取第一个匹配的元素
Element firstParagraph = doc.select("p").first();
String paraText = firstParagraph.text();
// 获取元素的 HTML 内容
String htmlContent = firstParagraph.html();

使用 CSS 选择器

// 通过 ID 选择
Element element = doc.select("#myId").first();
// 通过类名选择
Elements elements = doc.select(".myClass");
// 通过标签名选择
Elements paragraphs = doc.select("p");
// 组合选择器
Elements links = doc.select("div.content a[href]");
// 属性选择
Elements images = doc.select("img[src$=.jpg]");

获取元素属性

// 获取链接
Elements links = doc.select("a[href]");
for (Element link : links) {
    String href = link.attr("href");
    String text = link.text();
}
// 获取图片地址
Elements images = doc.select("img[src]");
for (Element img : images) {
    String src = img.attr("abs:src"); // 获取绝对路径
    String alt = img.attr("alt");
}

完整示例:爬取新闻标题

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class JsoupExample {
    public static void main(String[] args) {
        try {
            // 连接到目标网站
            Document doc = Jsoup.connect("https://news.example.com")
                .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
                .timeout(10000)
                .get();
            // 选择新闻标题
            Elements newsTitles = doc.select("h2.news-title a");
            // 遍历并打印
            for (Element title : newsTitles) {
                String newsText = title.text();
                String newsLink = title.attr("abs:href");
                System.out.println("标题: " + newsText);
                System.out.println("链接: " + newsLink);
                System.out.println("---");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

常用 API 汇总

方法 描述
getElementById(String id) 根据 ID 获取元素
getElementsByTag(String tag) 根据标签名获取元素
getElementsByClass(String className) 根据类名获取元素
select(String cssQuery) CSS 选择器查询
attr(String key) 获取属性值
text() 获取文本内容
html() 获取 HTML 内容
outerHtml() 获取包含自身标签的 HTML
hasAttr(String key) 是否有指定属性

注意事项

  1. 处理编码问题:使用 Jsoup.parse(html, "UTF-8") 指定编码
  2. 添加 User-Agent:避免被服务器拒绝
  3. 设置超时timeout(int millis) 防止请求卡住
  4. 异常处理:网络请求需要处理 IOException

如果需要更高级的用法,如处理动态加载的内容,可能需要结合 Selenium 或 Playwright 等工具。

抱歉,评论功能暂时关闭!