Java中使用HTMLParser提取网页纯文本的完整示例
在Java开发中,经常需要从网页源码中提取纯文本内容以进行数据分析或存储。本文通过一个基于HTMLParser库的具体实例,详细展示了如何发起HTTP请求、解析HTML节点并过滤出文本信息,包含完整的代码实现与关键参数说明。
核心功能与目标
该示例旨在演示如何使用 htmlparser 库将一个HTML页面的源码转换为纯文本字符串。主要流程包括:连接URL获取源数据、使用过滤器遍历所有节点、调用内置方法提取每个节点的纯文本,并最终拼接返回结果。
环境准备
在开始之前,确保Java项目中已引入以下依赖:
- HTMLParser库:需要下载
htmlparser.jar并将其添加到项目的构建路径(Build Path)中。 - 基础工具类:使用Java标准库中的
java.net和java.io进行网络通信与文件读写。
操作步骤与代码实现
第1步:设置主测试入口与网络请求
目的:定义一个测试方法,模拟从指定网址获取HTML源码,并调用提取逻辑。
操作细节:
- 创建
java.net.URL对象,传入目标网页地址。 - 通过
openConnection()获取HttpURLConnection实例,建立连接。 - 获取输入流
InputStream,并使用BufferedReader逐行读取内容,拼接为完整的HTML字符串sTotalString。 - 调用自定义的
extractText方法处理字符串。
package com.test;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
public class TestHTMLParser {
public static void testHtml() {
try {
String sCurrentLine;
String sTotalString = "";
java.io.InputStream l_urlStream;
// 1. 设置目标URL
java.net.URL l_url = new java.net.URL("http://www.ideagrace.com/html/doc/2006/07/04/00929.html");
java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
l_connection.connect();
// 2. 读取HTML内容
l_urlStream = l_connection.getInputStream();
java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString += sCurrentLine + "\r\n";
}
// 3. 调用提取方法
String testText = extractText(sTotalString);
System.out.println(testText);
} catch (Exception e) {
e.printStackTrace();
}
}
}
第2步:实现纯文本提取逻辑
目的:解析HTML字符串,遍历所有节点并提取其可见文本。
操作细节:
- 创建解析器:使用
Parser.createParser(input, encoding)初始化解析器,注意指定正确的字符集(如GBK),以避免中文乱码。 - 添加过滤器:使用匿名内部类实现
NodeFilter,其中accept方法始终返回true,表示匹配所有节点类型。 - 遍历节点:调用
extractAllNodesThatMatch获取所有匹配的NodeList。 - 提取文本:遍历列表中的每个节点,调用
nodet.toPlainTextString()获取纯文本,并进行编码转换后追加到StringBuffer。
public static String extractText(String inputHtml) throws Exception {
StringBuffer text = new StringBuffer();
// 指定编码格式,防止中文乱码
Parser parser = Parser.createParser(new String(inputHtml.getBytes(),"GBK"), "GBK");
// 遍历所有的节点,这里使用通配过滤器
NodeList nodes = parser.extractAllNodesThatMatch(new NodeFilter() {
public boolean accept(Node node) {
return true;
}
});
// 打印节点数量以便调试
System.out.println(nodes.size());
for (int i=0; i
第3步:高级用法 - 按标签过滤(可选)
目的:如果需要仅提取特定HTML标签(如表格 table)的内容,可使用 TagNameFilter。
操作细节:
- 创建
TagNameFilter实例,指定目标标签名(如 "table")。 - 使用该过滤器提取对应的
NodeList。 - 将节点强制转换为
TableTag以进行更精细的操作。
public static void test5(String resource) throws Exception {
Parser myParser = new Parser(resource);
myParser.setEncoding("GBK");
String filterStr = "table";
NodeFilter filter = new TagNameFilter(filterStr);
NodeList nodeList = myParser.extractAllNodesThatMatch(filter);
if(nodeList != null && nodeList.size() > 11){
TableTag tabletag = (TableTag) nodeList.elementAt(11);
// 此处可对tabletag进行进一步处理
}
}
第4步:执行与验证
目的:运行程序,确认控制台输出是否为去除HTML标签后的纯文本。
操作:
- 在
main方法中调用testHtml()。 - 观察控制台输出的字符串,检查是否包含预期的文字内容且无HTML标记。
完成判断与注意事项
- 编码一致性:示例中使用了
GBK编码。如果目标网页是UTF-8或其他编码,请务必修改Parser.createParser和字节转换处的编码标识,否则会出现乱码。 - 空指针检查:在进行如
elementAt(index)的操作前,建议先检查nodeList.size(),避免索引越界异常。 - 资源释放:在实际生产环境中,建议在
finally块中关闭网络连接和Reader,虽然本示例侧重于算法逻辑,但良好的资源管理习惯至关重要。
简要总结
通过以上步骤,我们成功实现了在Java环境下使用HTMLParser提取网页纯文本的功能。该方法灵活且强大,适用于多种简单的网页内容抓取场景。以上就是Java使用HTMLParser提取网页纯文本例子的详细内容,更多关于Java网页解析、HTMLParser库使用技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









