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文件中的文本內容。
- 創(chuàng)建一個 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 {
//創(chuàng)建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文本內容內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot如何使用Fastjson解析Json數據
這篇文章主要介紹了SpringBoot如何使用Fastjson解析Json數據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

