問題
BeautifulSoupで書き方の間違ったHTMLをパースすると,勝手に構造を変えられてしまいます。
問題の発生するコード例
html = '<h3><p>テキスト</p></h3>'
soup = BeautifulSoup(html, 'lxml')
print(soup.prettify())
期待する出力.
<html>
<body>
<h3>
<p>
テキスト
</p>
</h3>
</body>
</html>
実際の出力.
<html>
<body>
<h3>
</h3>
<p>
テキスト
</p>
</body>
</html>
解決方法
パーサーをlxml
からhtml.parser
に変更すると解決します。
ただし,ルートにhtmlタグ
とbodyタグ
が自動で追加されなくなるので,必要な場合は自分で追加しましょう。
html = '<h3><p>テキスト</p></h3>'
soup = BeautifulSoup(html, 'html.parser')
print(soup.prettify())
出力.
<h3>
<p>
テキスト
</p>
</h3>