在 Java 开发中,从 HTML 文件中剔除标签、样式、脚本等冗余信息、提取核心纯文本,是数据清洗、全文索引、AI 训练数据准备等场景下的高频需求。面对嵌套复杂的 HTML 标签,使用正则表达式处理不仅容易出错,维护成本也相当高。因此,借助成熟的解析库是更可靠的选择。
本文详细介绍如何使用 Free Spire.Doc for Java 这一免费库来实现 HTML 文本提取。
Free Spire.Doc for Java 本身是围绕 Word 文档的段落、节、表格等元素设计的文档处理库。当调用
这种方式本质上是一种 “将 HTML 解析为富文本再提取纯文本”的桥接方案,开发者无需手动编写解析逻辑。
在项目的
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc.free</artifactId>
<version>14.3.1</version>
</dependency>
</dependencies>
注意:
spire.doc.free 为免费版,对于基础的文本提取需求,免费版已足够。
implementation 'e-iceblue:spire.doc.free:14.3.1@jar'
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import java.io.FileWriter;
import java.io.IOException;
public class ExtractTextFromHTML {
public static void main(String[] args) {
// 1. 创建 Document 对象(核心入口)
Document doc = new Document();
// 2. 加载 HTML 文件(指定格式为 Html)
doc.loadFromFile("Sample.html", FileFormat.Html);
// 3. 获取提取的纯文本
String text = doc.getText();
// 4. 将文本写入输出文件(使用 try-with-resources 确保资源安全释放)
try (FileWriter fileWriter = new FileWriter("HTMLText.txt")) {
fileWriter.write(text);
System.out.println("文本提取完成,已保存至 HTMLText.txt");
} catch (IOException e) {
System.err.println("写入文件失败:" + e.getMessage());
}
}
}
如果需要从网络上的 HTML 页面提取文本,可以先通过 HTTP 请求获取 HTML 内容并保存为临时文件,再执行提取。
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
public class ExtractTextFromURL {
public static void main(String[] args) throws IOException {
// 1. 从URL读取HTML并保存为临时文件
String htmlFilePath = downloadHtmlFromUrl("https://example.com/article");
// 2. 创建Document对象并加载HTML文件
Document doc = new Document();
doc.loadFromFile(htmlFilePath, FileFormat.Html);
// 3. 提取文本
String text = doc.getText();
// 4. 保存结果
try (FileWriter writer = new FileWriter("URLText.txt")) {
writer.write(text);
System.out.println("从URL提取文本完成");
}
}
/**
* 从指定URL下载HTML内容并保存为本地临时文件
* @param urlString 目标URL
* @return 临时文件的路径
*/
private static String downloadHtmlFromUrl(String urlString) throws IOException {
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(10000);
String tempFilePath = "temp_page.html";
try (InputStream inputStream = connection.getInputStream();
InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(reader);
FileWriter fileWriter = new FileWriter(tempFilePath)) {
String line;
while ((line = bufferedReader.readLine()) != null) {
fileWriter.write(line);
fileWriter.write(System.lineSeparator());
}
}
return tempFilePath;
}
}
注意:实际生产环境中建议使用
java.net.http.HttpClient(JDK 11+)或 Apache HttpClient 等更成熟的 HTTP 客户端库,并妥善处理字符编码、重定向、超时等细节。
如果 HTML 内容已经以字符串形式存在于内存中(例如来自数据库或用户输入),也可以直接解析:
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import java.io.ByteArrayInputStream;
public class ExtractTextFromHtmlString {
public static void main(String[] args) {
String htmlContent = "<html><body><h1>标题</h1><p>这是一段正文内容。</p></body></html>";
Document doc = new Document();
// 将字符串转换为字节输入流加载
doc.loadFromStream(new ByteArrayInputStream(htmlContent.getBytes()), FileFormat.Html);
String text = doc.getText();
System.out.println("提取的文本:\n" + text);
}
}
库在加载 HTML 时会忽略
免费版本适合轻量级的 HTML 文本提取需求,例如:
加载 HTML 文件时,请确保文件的字符编码与内容匹配。如果 HTML 文件包含非 UTF-8 编码的中文等内容,可能需要在使用
在 Java 生态中,提取 HTML 文本还有另一种主流方案——使用 Jsoup 这样的轻量级 HTML 解析器。两者对比如下:
选型建议:
使用 Free Spire.Doc for Java 提取 HTML 文本,核心代码仅有寥寥数行——通过
在实际项目中,建议根据具体需求(如是否需要保留格式、是否需要处理动态网页、是否需要文档格式转换等)综合评估,选择最适合的技术方案。