Java中使用HTMLParser提取网页纯文本的完整示例

Dylan
Dylan
发布时间:2026-10-14 | 4人浏览过
原创

在Java开发中,经常需要从网页源码中提取纯文本内容以进行数据分析或存储。本文通过一个基于HTMLParser库的具体实例,详细展示了如何发起HTTP请求、解析HTML节点并过滤出文本信息,包含完整的代码实现与关键参数说明。

核心功能与目标

该示例旨在演示如何使用 htmlparser 库将一个HTML页面的源码转换为纯文本字符串。主要流程包括:连接URL获取源数据、使用过滤器遍历所有节点、调用内置方法提取每个节点的纯文本,并最终拼接返回结果。

环境准备

在开始之前,确保Java项目中已引入以下依赖:

  • HTMLParser库:需要下载 htmlparser.jar 并将其添加到项目的构建路径(Build Path)中。
  • 基础工具类:使用Java标准库中的 java.net 和 java.io 进行网络通信与文件读写。

操作步骤与代码实现

第1步:设置主测试入口与网络请求

目的:定义一个测试方法,模拟从指定网址获取HTML源码,并调用提取逻辑。

操作细节:

  1. 创建 java.net.URL 对象,传入目标网页地址。
  2. 通过 openConnection() 获取 HttpURLConnection 实例,建立连接。
  3. 获取输入流 InputStream,并使用 BufferedReader 逐行读取内容,拼接为完整的HTML字符串 sTotalString。
  4. 调用自定义的 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字符串,遍历所有节点并提取其可见文本。

操作细节:

  1. 创建解析器:使用 Parser.createParser(input, encoding) 初始化解析器,注意指定正确的字符集(如 GBK),以避免中文乱码。
  2. 添加过滤器:使用匿名内部类实现 NodeFilter,其中 accept 方法始终返回 true,表示匹配所有节点类型。
  3. 遍历节点:调用 extractAllNodesThatMatch 获取所有匹配的 NodeList。
  4. 提取文本:遍历列表中的每个节点,调用 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。

操作细节:

  1. 创建 TagNameFilter 实例,指定目标标签名(如 "table")。
  2. 使用该过滤器提取对应的 NodeList。
  3. 将节点强制转换为 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库使用技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表