【问题标题】:JSoup - Parse HTML tag by tagJSoup - 按标签解析 HTML 标签
【发布时间】:2016-01-28 18:54:09
【问题描述】:

我实际上是在用 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
    

蒂米M

【问题讨论】:

  • 是的,您可以逐个遍历标签并分别获取文本。但是,我真的不明白你在这里想要做什么。你能举个例子说明你想从这个 HTML 中得到什么吗?

标签: java html parsing jsoup


【解决方案1】:

要获取 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 查询。在这种情况下,由于每种情况只有一个元素,我们通过访问返回数组的索引 0 来访问它。

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

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

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

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

【讨论】:

  • 这实际上就是我现在正在做的事情,但这里的真正目的是在我生成的文件中添加一个\n每次我得到一个结束标签。例如,这样做将允许我的解析器将菜单的文本与实际文本分开。所以我想知道是否没有通用的方法,所以我可以迭代页面上的每个标签
  • 检查我的编辑,它指向另一个答案,在这种情况下可能对您有所帮助。
  • 非常感谢!要检查那个!干杯
【解决方案2】:

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

  1. HTML 单元
  2. HTMLCleaner
  3. 杰里科
  4. JSoup

https://en.wikipedia.org/wiki/Comparison_of_HTML_parsers

谢谢, 维内特

【讨论】:

  • 问题不在于可用的解析器。这是关于如何在 Jsoup 中做到这一点。这个答案完全不相关。
  • 不相关的答案
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
相关资源
最近更新 更多