1

HTML ページを整理して、Python で XML に変換する必要があります。必要に応じて、いくつかの「悪い」部分を失います。

TagSoupは以前から使用していましたが、新しい「記事」、「フッター」タグが理解できず、頭にない「メタ」が気に入らない。結果の XML を処理することがほとんど不可能になります。

これまでのところhtml5lib の機能は気に入っていますが、5 回目のテスト (非常に奇妙なテスト) は失敗しました。解析時

<div attr="val"">

html5lib + xml.dom treebuilder を使用して、結果の XML 文字列で次のようになりました。

<div attr="val" "="">

これは整形式の xml では良い結果ではありません。

ツリービルダーとしてhtml5lib + lxmlを試したところ、

<div attr="val" U00022="">

これは優れていますが、問題はlxmlがタグの終了タグ/スラッシュを「食べる」ことであり、 XMLを出力するときに<link>それらを作成します。<link ... >

何を使用することをお勧めしますか?

4

1 に答える 1

2

method次のように、要素を自己閉鎖するかどうかを設定するために使用できます。

from lxml import etree

tree = etree.Element('div', attrib={'attr':'val', 'U00022':''})
etree.tostring(tree)
'<div U00022="" attr="val"/>'

# parse as self-closing tag
etree.tostring(tree, method='xml')
'<div U00022="" attr="val"/>'
# parse as normal HTML
etree.tostring(tree, method='html')
'<div U00022="" attr="val"></div>'

次に、そこからやりたいことを何でもしてください。Element から書き込もうとしている場合は、以下も追加methodできます。

tree = html5lib.parse('<div attr="val" U00022="">', treebuilder='lxml', namespaceHTMLElements=False)
tree.write('yourfilename', method='html')

プリントアウト:

<html><head></head><body><div u00022="" attr="val"></div></body></html>
于 2014-11-03T15:35:53.647 に答える