BeautifulSoup4で正しくencodeを行い文字化けを無くす方法

みなさまおはこんばんにちは、せなです

今回はBeautifulSoup4でHTMLなどをパースしたときにencodeが正しく読み込まれず文字化けしたときの対処法と出力時の文字化けの対処法について説明したいと思います

encodeが分かっている場合

encodeが例えば「utf-8」であるのなら、パースを行う際に「from_encoding='utf-8'」とすれば簡単に正しいエンコードを取得することができます

soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')

encodeが分からない場合

encodeが分からない場合には「BeatuifulSoupオブジェクト.original_encoding」を使用することでencodeを判別することができます

soup = BeautifulSoup(html, 'html.parser')
soup.original_encoding

欠点として、「.original_encoding」はバイト単位で読み込みを行うため処理に時間がかかります
また、短い量での判別ですと稀にほかのencodeと間違えることがあります

出力するときに文字化けが発生する場合

Beautiful Soupでは入力時のencodeに関係なく強制的に「utf-8」で出力を行います
もし、「utf-8」以外での出力を行いたい場合にはprettify()」メソッドを使用します

以下は「Shift_JIS」の場合です

soup = BeautifulSoup(html, 'html.parser')
soup.prettify('Shift_JIS')