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って感じでしょうか。