【问题标题】:How to parse HTML without calling the direct parent如何在不调用直接父级的情况下解析 HTML
【发布时间】:2017-01-20 15:18:20
【问题描述】:

我想使用 jsoup 解析这个 HTML,但我需要在不使用“更改类名”类的情况下提取标题和副标题,因为类名总是在变化。我只需要来自“h1”属性和“p”的文本

HTML:

<header class="my header">
   <div class="row">
      <h3>I don't want this      </h3>
      <div class="Changing class name">
         <h1>The headline             </h1>
         <p class=" my subtitle">
            The subtitle
         </p>
      </div>
   </div>
</header>

【问题讨论】:

  • 我不太了解 JSoup,但如果您不想使用该类,您可能必须确保结构始终相同,然后通过它们的路径访问元素,即header.div.div.h1header.div.div.p(如果有多个 div,你可能还需要一个常量索引)。

标签: java html parsing jsoup


【解决方案1】:

我们可以这样使用getElementsByTag:

String MyTitle = doc.getElementsByTag("h1").get(0).text();

或者我们可以这样使用select(工作更快):

String MyTitle = doc.select("my.header h1").first().text().trim();

关于字幕,我添加了一个检查以避免在字符串中输入 NULL:

Element Subtitle = doc.select("p.my").first();
if (Subtitle != null) {
    String MySubtitle = doc.select("p.my").text().trim();}

【讨论】:

    【解决方案2】:

    我会发表评论,但我还不能发表评论

    我知道有一个函数getElementsByTag()可以用来获取&lt;h1&gt;的每个元素,所以如果你知道只有标题使用&lt;h1&gt;你可以使用这个

    您也可以使用select() (https://jsoup.org/cookbook/extracting-data/selector-syntax) 来选择标题或例如副标题 您没有说字幕的类别发生了变化,所以我假设您可以查询我的字幕类别的&lt;p&gt;标签

    【讨论】:

    • 谢谢。部分工作正常。我忘了提,但有时有些文章没有字幕,所以当我在做 String articleSubTitle = doc.getElementsByTag("p").get(0).text();并且没有“p”我得到异常
    • 好吧,您可以检查列表或您从 getElementsByTag() 返回的任何内容的大小是否大于 0,并且基于此 get(0) 我不知道我真的不喜欢这个整个网站解析的东西,感觉如此静态和错误xD
    • 是的。它返回 NULL,所以我在将其保存到字符串之前添加了一个检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2011-08-23
    • 2020-03-05
    相关资源
    最近更新 更多