JSoup - 逐个标签解析 HTML 个标签
JSoup - Parse HTML tag by tag
我实际上正在 Java 中开发一个文本解析器,我被要求通过用它解析 HTML 来增强它。
解析器的目的是将解析的文件分成3个其他文件,一个包含文件中包含的所有单词,一个包含所有句子,另一个包含所有问题。
*.txt 部分工作正常,但在解析时出现问题 HTML。
我创建了一个扩展名为 *.txt 的临时文件并将其传递到我的文本解析器中,但是如果我传递一个 URL 与 HTML 链接的文件,其形成如下:
<!DOCTYPE html>
<head>
... some HTML here ...
</head>
<body>
<ul class="some_menu">
<li class="some_menu_item">n1</li>
<li class="some_menu_item">n2</li>
<li class="some_menu_item">n2</li>
</ul>
<div>
This is a question ?
This is a sentence .
... some other text ...
</div>
</body>
</html>
问题文件将填入:n1 n2 n3 This is a question
所以,我只是想知道,有没有一种方法可以通过标签解析 JSoup 标签,这样我就可以在每次关闭块时添加一个换行符?
如果您需要一些新信息,请不要问!
编辑: 我应该有 3 个输出文件,在这个例子中是:
一字一句
n1
n2
n3
This
is
a
question
sentence
... some other words ...
一个与所有句子
This is a sentence
一题一答
This is a question
TimmyM
要获取 html 正文中的所有文本,您可以使用:
Document doc = Jsoup.connect(url).get();
Elements body = doc.select("body");
String allText = body[0].text();
然后您可以拆分文本,将每个单词分开。
要获取 div 标签中的文本,您可以使用:
Elements div = doc.select("div");
String divText = div[0].text();
然后您可以拆分 div文本以获得每个句子。
请注意 select 查询的 return 类型实际上是一个元素列表,即元素。那是因为可以有多个元素匹配您 select
查询。在这种情况下,由于每种情况只有一个元素,我们通过访问 returned 数组的索引 0 来访问它。
编辑:为了遍历所有元素,检查这个 answer。基本上
Elements elements = doc.body().select("*");
for (Element element : elements) {
System.out.println(element.text());
}
不过可能有些元素没有文本,因此您可以检查一下。
市场上有很多 HTML 解析器,例如
- HTML单位
- HTML清洁工
- 杰里科
- JSoup
https://en.wikipedia.org/wiki/Comparison_of_HTML_parsers
谢谢,
维尼特
我实际上正在 Java 中开发一个文本解析器,我被要求通过用它解析 HTML 来增强它。 解析器的目的是将解析的文件分成3个其他文件,一个包含文件中包含的所有单词,一个包含所有句子,另一个包含所有问题。
*.txt 部分工作正常,但在解析时出现问题 HTML。
我创建了一个扩展名为 *.txt 的临时文件并将其传递到我的文本解析器中,但是如果我传递一个 URL 与 HTML 链接的文件,其形成如下:
<!DOCTYPE html>
<head>
... some HTML here ...
</head>
<body>
<ul class="some_menu">
<li class="some_menu_item">n1</li>
<li class="some_menu_item">n2</li>
<li class="some_menu_item">n2</li>
</ul>
<div>
This is a question ?
This is a sentence .
... some other text ...
</div>
</body>
</html>
问题文件将填入:n1 n2 n3 This is a question
所以,我只是想知道,有没有一种方法可以通过标签解析 JSoup 标签,这样我就可以在每次关闭块时添加一个换行符?
如果您需要一些新信息,请不要问!
编辑: 我应该有 3 个输出文件,在这个例子中是:
一字一句
n1 n2 n3 This is a question sentence ... some other words ...
一个与所有句子
This is a sentence
一题一答
This is a question
TimmyM
要获取 html 正文中的所有文本,您可以使用:
Document doc = Jsoup.connect(url).get();
Elements body = doc.select("body");
String allText = body[0].text();
然后您可以拆分文本,将每个单词分开。 要获取 div 标签中的文本,您可以使用:
Elements div = doc.select("div");
String divText = div[0].text();
然后您可以拆分 div文本以获得每个句子。
请注意 select 查询的 return 类型实际上是一个元素列表,即元素。那是因为可以有多个元素匹配您 select
查询。在这种情况下,由于每种情况只有一个元素,我们通过访问 returned 数组的索引 0 来访问它。
编辑:为了遍历所有元素,检查这个 answer。基本上
Elements elements = doc.body().select("*");
for (Element element : elements) {
System.out.println(element.text());
}
不过可能有些元素没有文本,因此您可以检查一下。
市场上有很多 HTML 解析器,例如
- HTML单位
- HTML清洁工
- 杰里科
- JSoup
https://en.wikipedia.org/wiki/Comparison_of_HTML_parsers
谢谢, 维尼特