如何选择除最后两个tr之外的所有tr

时间:2011-02-11 03:29:55

标签: python xpath lxml except

在lxml中,我使用xpath来选择表中的所有tr(具有不同的行数),除了包含乱码的最后两行。

是否存在排除最后两行的模式匹配?我正在查看xpath教程,显然有一个“except”运算符和一个“last()”,但似乎无法使我的代码正常工作。

到目前为止,我有这个。我该添加什么来使它排除最后两行?主要问题是tr的数量变化。

result = doc.xpath("//tr")

我想我可以把它变成一个列表,然后删除最后两个元素,但是有没有更简单/更优雅的解决方案?

提前致谢!

2 个答案:

答案 0 :(得分:9)

使用

expressionSelectingTheTable/tr[not(position() > last() -2)]

其中expressionSelectingTheTable应替换为选择要为其提出问题的表的特定XPath表达式(例如//table[@id='foo']

此单个XPath表达式选择tr父级的所有table子级,其位置不是最后两个子级之一。

答案 1 :(得分:2)

result = doc.xpath("//tr")[0:-2]

应该做的伎俩。