我正在尝试使用lxml将文本插入到html表中。
表很简单,它有一个标题。我想解析一个项目列表,每个项目都应该在表格中有一行。就这样:
--------
| HEAD |
--------
| Item |
--------
| Item |
--------
我创建了一个采用路径和模板的函数。该路径用于保存页面,模板是用于插入数据的.html。我的代码如下所示:
def genereate_page(path, template):
tree = html.parse(template)
root = tree.getroot()
items = ['Item1', 'Item2', 'Item3', 'Item4']
table = root.findall('.//*[@table="results"]')
for i in items:
row = etree.Element('tr')
data = etree.Element('td')
data.text = i
row.append(data)
table.append(row)
with open(path, 'w') as f:
f.write(etree.tostring(root, pretty_print=True).decode('utf-8'))
我的模板文件如下所示:
<html>
<head>
<title>example</title>
</head>
<body>
<table id="results">
<tr id="header_row">
<th>Test</th>
</table>
</body>
</html>
所有内容都会编译,并且没有给出错误,但是没有插入任何文本。我只是返回了模板,然而它关闭了header_row,所以发生了一些事情。如何使用lxml?
将项目列表中的文本插入表格中答案 0 :(得分:2)
目前table
变量是一个列表,而table.append()
只是将项目添加到列表中。由于HTML中只有一个表格,因此您可以使用find()
代替findall()
来获取表格元素,然后正确地将子元素附加到其中:
table = root.find('.//*[@id="results"]')
for i in items:
row = etree.Element('tr')
data = etree.Element('td')
data.text = i
row.append(data)
table.append(row)