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

在JSoup中有一种方法可以解析整个HTML标记吗?

爱茂勋
2023-03-14

共有1个答案

姬雪松
2023-03-14

是的,您可以迭代您的子项

以下是屏幕截图中HTML的简化版本,显示了5个元素:

<li>
    <span class="foo"><img src="bar" class="img"></span>
    <span class="bar">Collins</span>
    <i class="baz1"><img src="baz1" class="img"></i>
    <i class="baz2"><img src="baz2" class="img"></i>
    <i class="baz3"><img src="baz3" class="img"></i>
</li>

假设您已选择此特定<code>

String html = "<li><span class=\"foo\"><img src=\"bar\" class=\"img\"></span><span class=\"bar\">Collins</span><i class=\"baz1\"><img src=\"baz1\" class=\"img\"></i><i class=\"baz2\"><img src=\"baz2\" class=\"img\"></i><i class=\"baz3\"><img src=\"baz3\" class=\"img\"></i></li>";

Document document = Jsoup.parse(html);

Element element = document.selectFirst("li");
element.children().forEach(child -> {
    // do your processing here - this is just an example:
    if (child.hasText()) {
        System.out.println(child.text());
    } else {
        System.out.println(child.html());
    }
});

上面的代码打印以下输出:

<img src="bar" class="img">
Collins
<img src="baz1" class="img">
<img src="baz2" class="img">
<img src="baz3" class="img">

更新

如果起点是一个URL,那么您需要以此开始:

Document document = Jsoup.connect("https://www...").get();

然后练习是关于确定一种独特的方式来找到您的特定元素。因此,如果我们更新我之前的示例,让我们假设您的网页是这样的:

<html>
    <head>...</head>
    <body>
        <div>
            <ul class="vList_4">
 
                <li>
                    <span class="foo"><img src="bar" class="img"></span>
                    <span class="bar">Collins</span>
                    <i class="baz1"><img src="baz1" class="img"></i>
                    <i class="baz2"><img src="baz2" class="img"></i>
                    <i class="baz3"><img src="baz3" class="img"></i>
                </li>
            </ul>
        </div>
    </body
</html>

这里我们有一个中的类

现在,代替我之前的选择器:

Element element = document.selectFirst("li");

我们可以使用这个更具体的选择器:

Element element = document.selectFirst("ul.vList_4 li");

将像以前一样打印相同的结果。

因此,这完全取决于您查看页面结构并弄清楚如何跳转到页面的相关部分。

有关描述如何构造选择器的技术详细信息,请参阅此处。

 类似资料:
  • 我实际上正在用Java开发一个文本解析器,有人要求我通过用它解析HTML来增强它。解析器的目的是将被解析的文件分成另外三个文件,一个包含文件中包含的所有单词,一个包括所有句子,另一个包含所有问题。 *.txt部分工作得很好,但我在解析HTML时遇到了一个问题。 我创建了一个扩展名为*.txt的临时文件,并将其在我的文本解析器中传递,但是如果我传递一个带有HTML文件链接的URL,其格式如下所示:

  • 问题内容: 我已经读到,使用正则表达式解析XML / HTML是一个坏主意。另一种建议是使用XML解析器。BigQuery标准SQL库中是否存在一个? 问题答案: 如Elliot所提到的,这是有关如何在BigQuery中使用Javascript UDF的文档。 https://cloud.google.com/bigquery/docs/reference/standard-sql/user-de

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

  • Jsoups解析是否存在某种类型的限制。我一直在处理内存问题,这是我在这个网站上公开的另一个问题,但我开始意识到我甚至没有得到我需要的所有信息。 我正在使用jsoup来解析一个html页面,它是一个测试页面,里面只有数百万个由空白分隔的数字。当我用jsoup解析它时,我可以得到一些文本,但它不会得到全部。 例如,如果我有一个,它包含来自.parse()的html,那么它只有整个网页中数字的一半。如

  • 我试图在这里使用JSOUP解析html标记。我对jsoup是新来的。基本上,我需要解析这些标记,获取这些标记中的文本,并应用class属性中提到的样式。 我正在创建一个SpannableStringBuilder,它可以创建子字符串,应用样式,并将它们附加到没有样式的文本中。 我不确定如何解析不在任何标记之间的字符串,例如“there are”和“worker from the”。 需要输出,例如

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