Python 在使用LXML时,为什么body元素不是这个html片段中table元素的父元素

Python 在使用LXML时,为什么body元素不是这个html片段中table元素的父元素,python,lxml,Python,Lxml,我正在尝试处理一些名为xls的文件,这些文件可以在Excel中打开,但它们是web存档文件。如果有一些嵌套表,我想首先处理非嵌套表。我想我可以通过只查找那些其父元素有body标记但我的表中没有一个是table.get_parent().tag=='body'true的表来捕获非嵌套表。即使对于表snip,该特定表的父元素的标记下面也是一个div标记 <html> <head> <META http-equiv=3DContent-Type content

我正在尝试处理一些名为xls的文件,这些文件可以在Excel中打开,但它们是web存档文件。如果有一些嵌套表,我想首先处理非嵌套表。我想我可以通过只查找那些其父元素有body标记但我的表中没有一个是table.get_parent().tag=='body'true的表来捕获非嵌套表。即使对于表snip,该特定表的父元素的标记下面也是一个div标记

<html>
  <head>
    <META http-equiv=3DContent-Type content=3D'text/html; charset=utf-8'><script type=3Dtext/javascript src=3DShow.js>/* Do Not Remove This Comment */</script></head>
  <body>
    <table class=3Dreport id=3DID0EI>
      <tr>
        <th>
返回

     <Element div at 9f05f10>
救援行动

tree = html.fromstring(someString)
table_tops = set(tree.xpath('//table'))-set(tree.xpath('//table//table'))
可能有一些奇特的xpath(一些非常聪明的人会发布)来实现这一点,但这应该是超快速的(并且易于阅读)

更新 css版本也有同样的想法

myTree=html.fromstring(someString)
table_tops = set(myTree.cssselect('table'))-set(myTree.cssselect('table table'))

按CSS选择可能会返回位于其他地方的div中的另一个表?这很巧妙。我从未理解过xpath,但从这个示例中我学到了很多东西,我认为//table是获取文档树根上所有表的命令?
//tree
是任意树<代码>/位于当前节点的任何位置或其下方。
tree = html.fromstring(someString)
table_tops = set(tree.xpath('//table'))-set(tree.xpath('//table//table'))
myTree=html.fromstring(someString)
table_tops = set(myTree.cssselect('table'))-set(myTree.cssselect('table table'))