我试图获取tr元素的父节点,同时迭代它们时遇到了问题。
这是我正在使用的基本表格。
<table border=1> <tbody> <tr> <td> <p>Some text</p> </td> <td> <p>Some more text</p> </td> </tr> <tr> <td> <p> Some more text</p> </td> <td> <p> Some more text</p> </td> </tr> <tr> <td> <p> Some more text</p> </td> <td> <p> Some more text</p> </td> </tr> </tbody> </table>
这是我使用lxml
获取父节点的Python脚本import lxml.html
htm = lxml.html.parse('plaintable.htm')
tr = htm.xpath('//tr')
for x in tr:
tbody = tr.getparent()
if tbody.index(tr) == 1:
print ('Success!')
print ('Finished')
运行脚本时出现此错误: AttributeError:&#39; list&#39;对象没有属性&#39; getparent&#39;
我对Python很陌生,所以它可能很简单,我搞砸了。我仔细阅读了lxml文档,但我找不到答案。
任何帮助都会很棒!
答案 0 :(得分:2)
tr
实际上是xpath匹配的列表。 x
对应于单个tr
元素 - 在其上调用getparent()
方法:
tr = htm.xpath('//tr')
for x in tr:
tbody = x.getparent()
# ...
尽管如此,如果你有一个table
和tbody
元素,我在循环中反复获取同一个父母时没有多大意义。为什么事先找不到它?
tbody = htm.xpath("//tbody")[0]
for x in tbody.xpath(".//tr"):
# ...
我需要找到每个表中的第一个tr来正确构建它
至于此 - 我会遍历所有table
元素并找到第一个tr
元素:
tables = htm.xpath("//table")
for table in tables:
first_tr = table.xpath(".//tr")[0]