JSoup - 按标记

时间:2016-01-28 09:59:40

标签: java html parsing jsoup

我实际上正在用Java开发一个文本解析器,并且我被要求通过解析HTML来增强它。 解析器的目的是将解析的文件分成3个其他文件,一个包含文件中包含的所有单词,一个包含所有句子,另一个包含所有问题。

* .txt部分工作正常,但在解析HTML时遇到了问题。

我创建了一个带有* .txt扩展名的临时文件,并将其传递给我的文本解析器,但如果我传递一个链接了HTML文件的URL,其形式如下:

<!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个输出文件,例如:

  1. 一个包含所有单词

    n1
    n2
    n3
    This
    is
    a
    question
    sentence
    ... some other words ...
    
  2. 一个包含所有句子

    This is a sentence
    
  3. 一个包含所有问题

    This is a question
    
  4. TimmyM

2 个答案:

答案 0 :(得分:0)

要获取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();

然后您可以拆分divText来获取每个句子。

请注意,select查询的返回类型实际上是Element列表,即Elements。那是因为可以有多个元素匹配您select查询。在这种情况下,由于每种情况只有一个元素,我们通过访问返回数组的索引0来访问它。

编辑:为了遍历所有元素,请检查此answer。基本上

Elements elements = doc.body().select("*");

for (Element element : elements) {
    System.out.println(element.text());
}

虽然可能有没有文字的元素,所以你可以检查一下。

答案 1 :(得分:-1)

市场上有很多HTML解析器,比如

  1. 的HtmlUnit
  2. HTMLCleaner
  3. 杰里科
  4. JS​​oup
  5. https://en.wikipedia.org/wiki/Comparison_of_HTML_parsers

    谢谢, 维尼特