2016-07-20 8 views
1

私はBeautifulSoupのlxmlパーサを使っていくつかのhtmlを解析しています。しかし、それは書かれているので、解析されていません。たとえば、次のコード:BeautifulSoup lxmlパーサータグを閉じるべきではありません

import bs4 

my_html = ''' 
<html> 
<body> 
<B> 
<P> 
Hello, I am some bolded text 
</P> 
</B> 
</body> 
</html> 
''' 

soup = bs4.BeautifulSoup(my_html, 'lxml') 
print soup.prettify() 

が印刷されます:

<html> 
<body> 
    <b> 
    </b> 
    <p> 
    Hello, I am some bolded text 
    </p> 
</body> 
</html> 

をあなたは何とかmy_htmlから<B>タグがさえそれが必要ものの、清書バージョンで<p>タグの前に閉鎖されることを見ることができます</p>の後に閉じてください。何が起こっているのかについてのアイデア?私は完全に困惑している。

答えて

1

<b>タグ内に<p>タグを含めることができないため、パーサーが壊れたHTMLを修正しようとしているからです。 html5libのhtml5libパーサーまたはPythonのhtml.parserを使用すると、期待される出力が得られます(私はこれをテストしたので、私はこれを知っています)。

+0

おかげで、私はそれらに見ていきます、私は、少なくとも前に 'html.parser'と他のいくつかの問題がありましたが。 – George

2

これは、<b>タグ内で段落が許可されていないためです。

フローコンテンツを受け入れるタグのみが<p>タグの親として許可されます。リストについては、hereを参照してください。

ただし、その逆を行うことはできます。 は<b>タグの親として許可されています。あなたのケースでは、あなたがこのような何かにあなたの生のHTMLを変更することができます。

my_html = ''' 
<html> 
<body> 
<p> 
<b> 
Hello, I am some bolded text 
</b> 
</p> 
</body> 
</html> 
''' 
+0

ありがとう、これは私が掻き集めているファイルですが、ドキュメントがどのように見えるかを実際に制御できないので、このケースを処理できるようにしたいと思います。 – George

+0

@George:この場合、[この回答](http://stackoverflow.com/a/23394822/2741678)によると、 'html5lib'はあなたの最善の賭けのようです。あなたのケースで期待どおりに動作します。 – Sumit

関連する問題