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

che*_*pro 3 python xpath lxml except

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

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

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

result = doc.xpath("//tr")
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Dim*_*hev 9

用途:

expressionSelectingTheTable/tr[not(position() > last() -2)]
Run Code Online (Sandbox Code Playgroud)

其中expressionSelectingTheTable应与选择表,对于该问题被提出(例如,特定的XPath表达式被取代//table[@id='foo'])

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

  • @chesspro:它实际上是`not(position()> last()-2)`,是的,`position()`和`last()`函数可以参与*any*XPath表达式.像'not(position()= last())`这样的表达式经常被使用. (2认同)