【问题标题】:Jsoup eq selector returns no valueJsoup eq 选择器不返回任何值
【发布时间】:2017-08-23 17:36:31
【问题描述】:

尝试使用Jsoup 1.10.3 获取数据,似乎eq 选择器无法正常工作。

我尝试了第 n 个孩子,但它似乎没有得到第二个表 (table:nth-child(2))。

我的选择器正确吗?

 html > body > table:nth-child(2) > tbody > tr:nth-child(2) > td:nth-child(2)

在下面的示例中,尝试提取值 232323

Here is the try it sample

【问题讨论】:

  • 你能放一个简单的示例 HTML 文档,你得到的结果和你期望的结果吗?
  • 添加了查看链接,上面写着#Here is the try it sample#

标签: java jsoup html-parsing


【解决方案1】:

您可能会遇到几个问题。首先,我认为您不想使用 :nth-child(an+b) 选择器。这是jsoup docs中对该选择器的解释:

:nth-child(an+b) 元素在文档树中之前有 an+b-1 个兄弟元素,对于 n 的任何正整数或零值,并且具有父元素。对于大于零的 a 和 b 的值,这有效地将元素的子元素分成 a 元素的组(最后一组取余数),并选择每个组的第 b 个元素。例如,这允许选择器对表格中的每隔一行进行寻址,并且可以用于以四次循环交替段落文本的颜色。 a 和 b 值必须是整数(正数、负数或零)。元素的第一个子元素的索引为 1。

我猜你想使用:table:nth-of-type(n) 选择器。

其次,你只用你的选择器选择元素,但你想得到可见的内容232323,它只是你选择的元素的一个内部节点。因此,缺少的是您获取内容的部分。有几种方法可以做到这一点。我再次建议您阅读文档。特别是cookbook 对初学者很有帮助。我想你可以使用这样的东西:

String content = element.text();

第三,使用 CSS 选择器,您确实需要遍历 DOM 的每个层次结构。由于表格总是包含 tbodytrtd 元素,您可以这样做:

String content = document.select("table:nth-of-type(2) tr:nth-of-type(2) td:last-of-type").text();

注意,我手头没有 java 编译器。请谨慎使用我的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多