== 唐突なエラー ==
今まではうまく動いていたのに急に動かなくなる。例外的なサイトが見つかるのが一番厄介だ。今日それにぶつかったので回避策
== 環境 ==
- Python
- BeautifulSoup
== BeautifulSoupではparserを指定するべし ==
今回のエラーの大元はここでした。あるサイトのあるタグの中身を取得したかったのですが、それができないサイトに引っかかってしまったのです。
実際に取得したかったhtmlがこちら
<div class="vnnews-text-post"> <table border="0" cellpadding="1" cellspacing="1" style="width: 450px;"> ... </table> <div> <p> ... </p> <p> ... </p> <p> ... </p> <p> ... </p> <p> ... </p> </div> </div>
こんな感じで書かれているので、この div.vnnews-text-post の div を取得したかったのですが、この中に未完成なソース(かっこの数が足りないとか)が含まれた状態で、分解していくと、
div.vnnews-text-post の中に table しか無い状態で取得されます。
実はこれ BeautifulSoup に parser を指定していなかったからです。
今回は parser に html5lib を指定してあげます。 html5lib を使うために下記でインストールします。
pip install html5lib
from bs4 import BeautifulSoup import html5lib parser = 'html5lib' # html5lib is required. insted of html.parser # soup = BeautifulSoup(page_html) soup = BeautifulSoup(page_html, parser)
こんな感じで html5lib を指定してあげることによってうまく取得することができました。