我有 xpath
page.search("//table[@class='campaign']//table")
它返回两个表。
我只需要选择第一张桌子。此行不起作用:
page.search("//table[@class='campaign']//table[1]")
如何只选择第一张桌子?
这也困扰着我。我仍然不完全知道为什么您的解决方案不起作用。但是,这应该:
page.search("//table[@class='campaign']/descendant::table[1]")
编辑:正如文档所说,
“位置路径与位置路径
//para[1]
的含义不同/descendant::para[1]
。后者选择第一个后代para元素;前者选择其父母的第一个para子元素的所有后代para元素。”
多亏了你的问题,我终于明白为什么会这样了:)。因此,根据您的结构和需求,这应该可行。
除了使用 XPath 表达式来选择第一个匹配元素,您还可以找到所有这些元素,然后将其删减:
first_table = page.search("//table[@class='campaign']//table").first
...或者更好的是,使用仅选择第一个at
:
first_table = page.at("//table[@class='campaign']//table")
另请注意,使用 CSS 选择器语法可以更简单地找到您的表达式:
first_table = page.at("table.campaign table")