Java实现提取HTML文件中的文本内容
从 HTML 文件中提取文本内容是数据抓取中的一个常见任务,你可以将提取的文本信息用于编制报告、进行数据分析或其他处理。本文分享如何使用免费 Java API 从HTML 文件中提取文本内容。
安装免费Java库
要通过Java提取HTML文本,需要用到Free Spire.Doc for Java免费库。以下提供两种安装方式:
1. 通过Maven仓库安装:
<repositories> <repository> <id>com.e-iceblue</id> <name>e-iceblue</name> <url>https://repo.e-iceblue.cn/repository/maven-public/</url> </repository> </repositories> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.doc.free</artifactId> <version>5.2.0</version> </dependency>
2. 下载Free Spire.Doc for Java库,解压后手动将Spire.Doc.jar添加到程序中。
使用Java从HTML文件中提取文本内容
基本步骤:
- 导入需要的类库;
- 通过 loadFromFile() 方法加载HTML文件;
- 通过 getText() 方法获取HTML文件中的文本内容。
- 创建一个 FileWriter 对象,将提取的文本内容写入一个txt文件中
示例代码:
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) throws IOException { //创建Document对象 Document doc = new Document(); //加载一个HTML文件 doc.loadFromFile("input.html", FileFormat.Html); //获取HTML文件中的文本 String text = doc.getText(); //将文本写入TXT文件 FileWriter fileWriter = new FileWriter("提取HTML文本.txt"); fileWriter.write(text); fileWriter.close(); } }
运行结果 :
方法补充
除了上文的方法,小编还为大家整理了一个使用Java提取html文件中的文本内容的工具类,需要的可以了解下
核心代码
//核心代码 String unescapeString = StringEscapeUtils.unescapeHtml4(inputString); String text = HTML2Text.convert(unescapeString); import javax.swing.text.MutableAttributeSet; import javax.swing.text.html.HTML; import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.parser.ParserDelegator; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.util.Stack; import java.util.logging.Logger; public class HTML2Text extends HTMLEditorKit.ParserCallback { private static final Logger log = Logger .getLogger(Logger.GLOBAL_LOGGER_NAME); private StringBuffer stringBuffer; private Stack<IndexType> indentStack; public static class IndexType { public String type; public int counter; // used for ordered lists public IndexType(String type) { this.type = type; counter = 0; } } public HTML2Text() { stringBuffer = new StringBuffer(); indentStack = new Stack<>(); } public static String convert(String html) { HTML2Text parser = new HTML2Text(); Reader in = new StringReader(html); try { // the HTML to convert parser.parse(in); } catch (Exception e) { log.severe(e.getMessage()); } finally { try { in.close(); } catch (IOException ioe) { // this should never happen } } return parser.getText(); } public void parse(Reader in) throws IOException { ParserDelegator delegator = new ParserDelegator(); // the third parameter is TRUE to ignore charset directive delegator.parse(in, this, Boolean.TRUE); } @Override public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) { log.info("StartTag:" + t.toString()); if (t.toString().equals("p")) { if (stringBuffer.length() > 0 && !stringBuffer.substring(stringBuffer.length() - 1) .equals("\n")) { newLine(); } newLine(); } else if (t.toString().equals("ol")) { indentStack.push(new IndexType("ol")); newLine(); } else if (t.toString().equals("ul")) { indentStack.push(new IndexType("ul")); newLine(); } else if (t.toString().equals("li")) { IndexType parent = indentStack.peek(); if (parent.type.equals("ol")) { String numberString = "" + (++parent.counter) + "."; stringBuffer.append(numberString); for (int i = 0; i < (4 - numberString.length()); i++) { stringBuffer.append(" "); } } else { stringBuffer.append("* "); } indentStack.push(new IndexType("li")); } else if (t.toString().equals("dl")) { newLine(); } else if (t.toString().equals("dt")) { newLine(); } else if (t.toString().equals("dd")) { indentStack.push(new IndexType("dd")); newLine(); } } private void newLine() { stringBuffer.append("\n"); for (int i = 0; i < indentStack.size(); i++) { stringBuffer.append(" "); } } @Override public void handleEndTag(HTML.Tag t, int pos) { log.info("EndTag:" + t.toString()); if (t.toString().equals("p")) { newLine(); } else if (t.toString().equals("ol")) { indentStack.pop(); newLine(); } else if (t.toString().equals("ul")) { indentStack.pop(); newLine(); } else if (t.toString().equals("li")) { indentStack.pop(); newLine(); } else if (t.toString().equals("dd")) { indentStack.pop(); } } @Override public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) { log.info("SimpleTag:" + t.toString()); if (t.toString().equals("br")) { newLine(); } } @Override public void handleText(char[] text, int pos) { log.info("Text:" + new String(text)); stringBuffer.append(text); } public String getText() { return stringBuffer.toString(); } }
到此这篇关于Java实现提取HTML文件中的文本内容的文章就介绍到这了,更多相关Java提取HTML文本内容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
JAVA中ListIterator和Iterator详解与辨析(推荐)
这篇文章主要介绍了JAVA中ListIterator和Iterator详解与辨析,需要的朋友可以参考下2017-04-04Java中BeanUtils.copyProperties基本用法与小坑
本文主要介绍了Java中BeanUtils.copyProperties基本用法与小坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-04-04MyBatis不同Mapper文件引用resultMap实例代码
这篇文章主要介绍了mybatis 不同Mapper文件引用resultMap的实例代码,非常不错具有参考借鉴价值,需要的朋友可以参考下2017-07-07
最新评论