我有xpath
page.search("//table[@class='campaign']//table")
返回两个表。
我只需要选择第一张桌子。这行不起作用:
page.search("//table[@class='campaign']//table[1]")
如何只选择第一张桌子?
答案 0 :(得分:7)
这也让我感到烦恼。我仍然不知道为什么你的解决方案不起作用。但是,这应该:
page.search("//table[@class='campaign']/descendant::table[1]")
编辑:正如the docs所说,
“位置路径
//para[1]
与位置的含义不同 路径/descendant::para[1]
。后者选择第一个后代 对元素;前者选择所有后代的para元素 他们父母的第一个孩子。“
感谢您提出的问题,我终于明白为什么这样做了:)。因此,根据您的结构和需求,这应该有效。
答案 1 :(得分:2)
您可以找到所有这些元素然后将其削减,而不是使用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")