Jsoup eq选择器不返回任何值

时间:2017-08-23 17:36:31

标签: java jsoup html-parsing

尝试使用class Investment(models.Model): member = models.ForeignKey(Member) project = models.ForeignKey(Project) time = models.DateField(default=datetime.now) class InvestmentSerializer(serializers.ModelSerializer): class Meta: model = Investment fields = ('time','member', 'project') 获取数据,似乎Jsoup 1.10.3选择器无法正常工作。

我尝试了nth-child,但似乎没有获得第二个表(table:nth-​​child(2))。

我的选择器是否正确?

eq

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

Here is the try it sample

1 个答案:

答案 0 :(得分:1)

您可能正在努力解决几个问题。首先,我认为您不想使用:nth-child(an+b)选择器。以下是jsoup docs

中该选择器的说明
  

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

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

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

String content = element.text();

第三,使用CSS选择器,您确实需要遍历DOM的每个层次结构级别。由于表格始终包含tbodytr以及td元素,因此您可以执行以下操作:

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

注意,我手边没有java编译器。请小心使用我的代码。