×

《Jsoup 库使用指南》

万邦-Jason 万邦-Jason 发表于2025-08-18 16:22:27 浏览222 评论0

抢沙发发表评论

Jsoup 是一个开源的 Java 库,专门用于解析 HTML 文档。它提供了非常强大的功能,可以轻松地从 HTML 中提取数据、修改文档结构等。本文将详细介绍 Jsoup 的基本使用方法,帮助你快速上手。

一、Jsoup 的功能

(一)解析 HTML 文档

Jsoup 可以解析本地 HTML 文件或从网络获取 HTML 内容。它能够将 HTML 文档解析为一个 DOM 树,方便后续操作。

(二)提取数据

通过选择器(Selectors),可以轻松地从 HTML 文档中提取特定的元素和属性。例如,提取所有链接、图片地址等。

(三)修改文档结构

Jsoup 允许你修改 HTML 文档的结构,如添加、删除或修改元素和属性。

(四)输出 HTML

可以将修改后的 HTML 文档输出为字符串,或者保存到文件中。

二、Jsoup 的基本使用

(一)添加依赖

如果你使用 Maven 管理项目,可以在 pom.xml 文件中添加以下依赖:

xml

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

(二)解析 HTML 文档

从字符串解析 HTML:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        String html = "<html><head><title>First parse</title></head>"
                + "<body><p>Parsed HTML into a doc.</p></body></html>";
        Document doc = Jsoup.parse(html);
        System.out.println(doc.title());
    }
}

从文件解析 HTML:

java

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

import java.io.File;
import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        File input = new File("example.html");
        Document doc = Jsoup.parse(input, "UTF-8");
        System.out.println(doc.title());
    }
}

从 URL 获取 HTML:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            System.out.println(doc.title());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(三)提取数据

使用选择器提取特定元素:

java

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) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Elements links = doc.select("a[href]");
            for (Element link : links) {
                System.out.println(link.attr("href"));
                System.out.println(link.text());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

提取特定属性:

java

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) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Elements images = doc.select("img[src]");
            for (Element img : images) {
                System.out.println(img.attr("src"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(四)修改文档结构

添加元素:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Element newParagraph = new Element("p").text("This is a new paragraph.");
            doc.body().appendChild(newParagraph);
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

删除元素:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Element toRemove = doc.select("p").first();
            toRemove.remove();
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

修改元素属性:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Element link = doc.select("a").first();
            link.attr("href", "http://newurl.com");
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(五)输出 HTML

将修改后的 HTML 输出为字符串:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

保存到文件:

java

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

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.html"))) {
                writer.write(doc.html());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、注意事项

(一)网络请求

在从网络获取 HTML 时,可能会遇到网络问题或目标网站的反爬虫机制。建议合理设置请求频率,避免对目标网站造成过大压力。

(二)选择器语法

Jsoup 的选择器语法类似于 CSS 选择器,非常强大。建议熟悉常用的选择器语法,以便更高效地提取数据。

(三)异常处理

在实际开发中,建议添加异常处理机制,确保程序的健壮性。

四、总结

Jsoup 是一个非常强大的 HTML 解析库,可以轻松地解析 HTML 文档、提取数据、修改文档结构等。通过本文的介绍和代码示例,你应该能够快速上手使用 Jsoup。希望这些内容对你有所帮助,祝你在开发中取得成功!Jsoup 是一个开源的 Java 库,专门用于解析 HTML 文档。它提供了非常强大的功能,可以轻松地从 HTML 中提取数据、修改文档结构等。本文将详细介绍 Jsoup 的基本使用方法,帮助你快速上手。

一、Jsoup 的功能

(一)解析 HTML 文档

Jsoup 可以解析本地 HTML 文件或从网络获取 HTML 内容。它能够将 HTML 文档解析为一个 DOM 树,方便后续操作。

(二)提取数据

通过选择器(Selectors),可以轻松地从 HTML 文档中提取特定的元素和属性。例如,提取所有链接、图片地址等。

(三)修改文档结构

Jsoup 允许你修改 HTML 文档的结构,如添加、删除或修改元素和属性。

(四)输出 HTML

可以将修改后的 HTML 文档输出为字符串,或者保存到文件中。

二、Jsoup 的基本使用

(一)添加依赖

如果你使用 Maven 管理项目,可以在 pom.xml 文件中添加以下依赖:

xml

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

(二)解析 HTML 文档

从字符串解析 HTML:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        String html = "<html><head><title>First parse</title></head>"
                + "<body><p>Parsed HTML into a doc.</p></body></html>";
        Document doc = Jsoup.parse(html);
        System.out.println(doc.title());
    }
}

从文件解析 HTML:

java

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

import java.io.File;
import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        File input = new File("example.html");
        Document doc = Jsoup.parse(input, "UTF-8");
        System.out.println(doc.title());
    }
}

从 URL 获取 HTML:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            System.out.println(doc.title());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(三)提取数据

使用选择器提取特定元素:

java

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) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Elements links = doc.select("a[href]");
            for (Element link : links) {
                System.out.println(link.attr("href"));
                System.out.println(link.text());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

提取特定属性:

java

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) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Elements images = doc.select("img[src]");
            for (Element img : images) {
                System.out.println(img.attr("src"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(四)修改文档结构

添加元素:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Element newParagraph = new Element("p").text("This is a new paragraph.");
            doc.body().appendChild(newParagraph);
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

删除元素:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Element toRemove = doc.select("p").first();
            toRemove.remove();
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

修改元素属性:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            Element link = doc.select("a").first();
            link.attr("href", "http://newurl.com");
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(五)输出 HTML

将修改后的 HTML 输出为字符串:

java

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

保存到文件:

java

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

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://example.com/").get();
            try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.html"))) {
                writer.write(doc.html());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、注意事项

(一)网络请求

在从网络获取 HTML 时,可能会遇到网络问题或目标网站的反爬虫机制。建议合理设置请求频率,避免对目标网站造成过大压力。

(二)选择器语法

Jsoup 的选择器语法类似于 CSS 选择器,非常强大。建议熟悉常用的选择器语法,以便更高效地提取数据。

(三)异常处理

在实际开发中,建议添加异常处理机制,确保程序的健壮性。

四、总结

Jsoup 是一个非常强大的 HTML 解析库,可以轻松地解析 HTML 文档、提取数据、修改文档结构等。通过本文的介绍和代码示例,你应该能够快速上手使用 Jsoup。希望这些内容对你有所帮助,祝你在开发中取得成功!


群贤毕至

访客