Beautiful Soupでhtml.parser
を使うのはやめましょう 😇
Beautiful Soupでスクレイピングしてると、tbody
要素がなかったことになってたり、同じ種類の子要素が5番目移行消えてたりと全然うまくパースできない問題がありました。
パーサをhtml.parser
からlxml
にするだけで解決しました。
# soup = BeautifulSoup(html, "html.parser")
soup = BeautifulSoup(html, "lxml")
ドキュメントによると4つのパーサが使えるみたいです。
- Python’s html.parser:
html.parser
- lxml’s HTML parser:
lxml
- lxml’s XML parser:
lxml-xml
- html5lib:
html5lib
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
Beautiful Soup以外のライブラリに依存することになりますが、基本的にlxml
を使うでよさそうですね。
場合によってはhtml5lib
って感じでしょうか。