lxmlを使用してテキストをhtmlテーブルに挿入しようとしています。lxmlでテーブルにテキストを挿入
テーブルはシンプルで、ヘッダーは1つです。そして、私はアイテムのリストを解析したい、これらのアイテムのそれぞれは、テーブルの行を持つ必要があります。そのように:
--------
| 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を使用して項目のリストからテーブルにテキストを挿入するにはどうすればよいですか?
感謝を!テーブルを見つけるために[@ table = "results"]の代わりに[@ id = "results"]を使用する理由はありますか? – cenh
@cenhあなたのHTMLテンプレートでは、 'results'は 'id'属性の値であり、' table'属性ではありません(テンプレート内にtableという名前の属性もありません)。 '@ attribute_name'はXPathでHTML属性を参照する方法です。 – har07