僕の世界観を変えてみる

文系男子が趣味でプログラミングを勉強していくブログです。他にも日常で起きたどうでもいいことや愚痴を書いていきたいです。座右の銘は和を以て貴しとなすです。仲良くやろうよ。

【python3】BeautifulSoupでhtml5lib使ってないのにAttributeErrorが発生するバグ?

f:id:htmllifehack:20171214225939j:plain

Amazon APIのラッパーであるbottlenoseをLinuxで使っていたらなにやらエラーが発生しました。

bottlenoseに原因があるわけではなくBeautifulSoupに問題があるようです。

Error Code
Traceback (most recent call last):
File "Testbottle.py", line 2, in
from bs4 import BeautifulSoup
File "/usr/lib/python3/dist-packages/bs4/__init__.py", line 30, in
from .builder import builder_registry, ParserRejectedMarkup
File "/usr/lib/python3/dist-packages/bs4/builder/__init__.py", line 314, in
from . import _html5lib
File "/usr/lib/python3/dist-packages/bs4/builder/_html5lib.py", line 70, in
class TreeBuilderForHtml5lib(html5lib.treebuilders._base.TreeBuilder):
AttributeError: module 'html5lib.treebuilders' has no attribute '_base'

html5libなんて使ってないのになんで???って感じ。

ちなみにパーサーはlxmlにしています。

なんかbottlenose使うときはlxmlを使うようにって書かれていたので愚直に守っています。

(本当はなんなのかよくわからないからそのまま使っているだけ)

ググってみたところ同じエラーで苦しんでいる人がいました。

ググればだいたい出てくるのでわかるとは思いますが、同じエラーで躓いてる同胞用に解決策を書いておきます。


Githubで同じエラーの質問がありました。
'html5lib.treebuilders' has no attribute '_base' on submission #38

よくわからないですけどアップデートしろとのこと。

原因はこちらの記事に書かれていました。
Bug #1603299 “Crash with latest html5lib” : Bugs : Beautiful Soup

どうやらBeautifulSoupのバージョンが4.4.1の場合に発生するバグのようです。

上の記事にはすでに改善されているとありますがそうでもなさそうですね。

とりあえずいつものアップデートとアップグレードを行いましょう。

~$ sudo apt-get upgrade && sudo apt-get update -y

あとbeautifulsoupとhtml5libもアップデートします。

というかこっちがメインです。

~$ sudo pip3 install -U bs4
~$ sudo pip3 install -U lxml
~$ sudo pip3 install -U html5lib

&&で繋げると見づらいので分割して書きました。

これでbs4は4.4.1➡4.4.6に、lxmlは3.5.0➡4.1.1に、html5libは1.10.0➡1.11.0になりました。

で、プログラムを走らせると通常通り動くはずです。

まあ相変わらずbottlenoseは、というかAmazon APIはHTTP Error 503が出るんですけどね。

本当不安定。