当前位置: 首页 > 知识库问答 >
问题:

JSoup-逐标记解析HTML标记

孙正业
2023-03-14

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

*.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>

问题文件将填充:n1n2n3这是一个问题

所以,我只是在想,有没有一种方法可以用JSoup逐个标签地进行解析,这样我就可以在每次关闭一个块时添加一个换行符?

如果您需要一些新信息,请不要费心去问!

编辑:我应该有3个输出文件,对于此示例,它们是:

>

  • 一个有所有单词的

    n1
    n2
    n3
    This
    is
    a
    question
    sentence
    ... some other words ...
    

    一个包含所有句子

    This is a sentence
    

    一个包含所有问题

    This is a question
    

    提姆。

  • 共有2个答案

    蒋英博
    2023-03-14

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

      < li>HTMLUnit < Li > html清除程序 < li >杰里科 < Li > j组

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

    谢谢,维妮特

    柯昆杰
    2023-03-14

    要获取 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以获得每个句子。

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

    编辑:为了遍历所有元素,请检查这个答案。基本上

    Elements elements = doc.body().select("*");
    
    for (Element element : elements) {
        System.out.println(element.text());
    }
    

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

     类似资料:
    • 我试图从这些div标签中获取文本,但是它们都不返回任何内容: HTML: 我想得到div类“消息”和h4标记和跨越“日期时间”中的文本,我试图: 和: 但是他们没有成功。

    • 问题内容: 我想删除标签之间的所有内容。输入示例可能是 输入: 输出将是: 基本上,我必须先删除整个区块 谢谢, 问题答案: 您最好对找到的 所有 元素进行迭代。所以你可以保证 a。)所有元素都被删除并且 b。)如果没有元素,那么什么也做不了。 例: 编辑: (除了我的评论) 当简单的 null /范围检查 在这里足够时,请不要使用异常处理: 代替:

    • 我正在尝试解析

    • 什么是正确的方法来删除只有HTML标签(保留所有自定义/未知的标签)与JSOUP(不是正则表达式)? 预期输入: 预期产出: 我尝试使用白名单清洁剂。none(),但它也会删除自定义标记。 我也尝试过: 但是它也删除了自定义标签。 这个答案对我不好,因为自定义标记的数量是无限的。

    • 这是我的密码 我想替换字体标签,并把span标签。在这将取代第一个字体标签但不是第二个标签

    • 如何从下面的html中解析出46389333? 我使用的是JSoup,显然我可以解析文本、标签和其他值。但是我不知道如何解析这个值。即使我只能解析出/exampleTweet/status/46389333,至少我可以解析这个字符串,这要容易得多。问题是,数字变了,显然例子也变了。不过,地位还是存在的,所以也许我可以利用这一点?任何帮助都是巨大的。