Python lxml 遍历 tr 元素
Python lxml iterating through tr elements
我运行在尝试获取 tr 元素的父节点同时遍历所有元素时遇到了一个问题。
这是我正在使用的基本 table。
<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>
这是我的 Python 使用 lxml
获取父节点的脚本
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: 'list' 对象没有属性 'getparent'
我是 Python 的新手,所以可能是我搞砸了一些简单的事情。我通读了 lxml 文档,但找不到答案。
任何帮助都会很棒!
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"):
# ...
I need to find the first tr in every table to build it properly
至于这个 - 我会遍历所有 table
元素并找到第一个 tr
元素:
tables = htm.xpath("//table")
for table in tables:
first_tr = table.xpath(".//tr")[0]
我运行在尝试获取 tr 元素的父节点同时遍历所有元素时遇到了一个问题。
这是我正在使用的基本 table。
<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>
这是我的 Python 使用 lxml
获取父节点的脚本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: 'list' 对象没有属性 'getparent'
我是 Python 的新手,所以可能是我搞砸了一些简单的事情。我通读了 lxml 文档,但找不到答案。
任何帮助都会很棒!
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"):
# ...
I need to find the first tr in every table to build it properly
至于这个 - 我会遍历所有 table
元素并找到第一个 tr
元素:
tables = htm.xpath("//table")
for table in tables:
first_tr = table.xpath(".//tr")[0]