>>> s = '<div> < 20 </div>'
>>> import lxml.html
>>> tree = lxml.html.fromstring(s)
>>> lxml.etree.tostring(tree)
'<div> </div>'
誰かがこれの回避策を知っていますか?
>>> s = '<div> < 20 </div>'
>>> import lxml.html
>>> tree = lxml.html.fromstring(s)
>>> lxml.etree.tostring(tree)
'<div> </div>'
誰かがこれの回避策を知っていますか?
HTML入力が壊れています。その<
左山かっこは、<
代わりににエンコードされている必要があります。壊れたHTMLの解析lxml
に関するドキュメントから:
壊れたHTMLの解析のサポートは、libxml2の回復アルゴリズムに完全に依存しています。パーサーがそれらを処理できないほどひどく壊れているドキュメントを見つけた場合、それはlxmlのせいではありません。また、結果のツリーに元のドキュメントのすべてのデータが含まれるという保証もありません。解析を続けるのに苦労しているとき、パーサーはひどく壊れた部品を落とさなければならないかもしれません。特に置き忘れたメタタグはこれに悩まされる可能性があり、エンコーディングの問題につながる可能性があります。
言い換えれば、あなたはそのようなドキュメントから得ることができるものを取ります、lxml
壊れたHTMLを処理する方法は他の方法では構成できません。
試すことができることの1つは、別のHTMLパーサーを使用することです。代わりにBeautifulSoupを試してみてください。壊れたHTML処理により、そのドキュメントの別のバージョンが提供され、必要なものが提供される可能性があります。lxml
BeautifulSoupは、とを含むさまざまなパーサーバックエンドを再利用できるhtml5lib
ため、柔軟性が向上します。
html5lib
パーサーはあなたにキャラクターを与えます(エスケープ<
に変換されます):<
>>> BeautifulSoup("<div> < 20 </div>", "html5lib")
<html><head></head><body><div> < 20 </div></body></html>
htmlの「予約文字」のようなものなので、<
実際にはである必要があります。その後、それは動作するはずです。<
<