【问题标题】:Getting second td element with Jsoup使用 Jsoup 获取第二个 td 元素
【发布时间】:2018-04-04 04:27:52
【问题描述】:

我正在尝试从网页中获取多个元素。为此,我决定使用 Jsoup。下图显示了我要提取的部分 html 部分:

我需要得到标记为红色的元素。我能得到的名字:

String url = "";
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("td.DifFlSb");
for(Element x:links){
   System.out.println(x.getElementsByTag("a").first().text());
}

我的问题是我不知道如何提取第二个td 中的数据。我尝试使用正则表达式,但没有。 td 没有类或 id,所以我不知道如何制作。

【问题讨论】:

  • 你可能想看看 xpath
  • 编辑您的标题以针对您的问题/问题。
  • 将 HTML 作为代码而不是图像包含在内要好得多。让别人更容易重现您的问题。

标签: java html jsoup


【解决方案1】:

您可以使用 Jsoup 和一些 Java 轻松解决这个问题。

Elements trs = doc.select("tr");
for (Element tr : trs){
  Elements tds = tr.select("td");
  if (tds && tds.size() > 0){
    Element secondTd = tds.get(1);
    //do whatever you need to do with td 
  }
}

请注意,我上面的代码未经测试。我没有Java环境,所以这只是在Stackoverflow的答案框中输入的。

顺便说一句:您应该始终将代码和 HTML 直接放在您的问题中。还要看 CSS,这是你使用 JSoup 进行抓取时熟悉的工具。

【讨论】:

    【解决方案2】:

    您可能想使用Elements secondTds = doc.select("tr td+td");

    这将针对第二个td。这是因为select 方法接受cssQuery 格式。

    示例:

    tr td+td {color: red;}
    <table>
    <tr>
    <td>Content td 1</td>
    <td>Content td 2</td>
    </tr>
    <tr>
    <td>Content td 1</td>
    <td>Content td 2</td>
    </tr>
    </table>

    【讨论】:

    • 然而,这将得到每个 td 在其之前有一个兄弟td 元素。在 OP 中,这将导致更多点击,因为每个 tr 有两个以上的 td 元素@
    • 如果你看一下图片here需要提取的部分,你会发现收集所有秒tds是有意义的
    • 对不起,根本没有粗鲁的意思,只是想通过使用唯一的 css 选择器答案来证明该缺陷。现在将从我的答案中删除我的你/我的演示。只需在您的答案中添加更多 tds,我的意思就应该很清楚了。
    【解决方案3】:

    您可以使用此代码选择a标签的父元素的第一个兄弟:

    for(Element x:links){
        System.out.println(x.getElementsByTag("a").first().text());
        System.out.println(x.getElementsByTag("a").first().parent().siblingElements().first().text());
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      相关资源
      最近更新 更多