Beautiful Soup 4でうまくパースできなかった

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