BeautifulSoupの文字化けが止まらない時の解消方法 – Python



BeautifulSoupの文字化け

プログラムにおいて、日本語というのはすごくめんどくさいです。

日本に生まれたことを後悔するレベルでメンドクサイ。

今回はrequestsを使ったスクレイピングにおける、BeautifulSoupの文字化けの解消法です。

res.textをやめる

大体BeautifulSoupにテキストを渡すときはこんな感じだと思います。

import requests
from bs4 import BeautifulSoup as bs4

res = requests.get('https://www.yahoo.co.jp')
soup = bs4(res.text,'lxml')

このパターンだと文字化けするサイトが割とあります。

res.contentを渡す癖をつける

import requests
from bs4 import BeautifulSoup as bs4

res = requests.get('https://www.yahoo.co.jp')
soup = bs4(res.content,'lxml')

requestsのレスポンスオブジェクトのtextというのはunicode文字列を取得できますが、contentではbytes文字列を取得できます。

これでだけで95%の文字化けは解消されます。

BeautifulSoupのDOM取得メソッドまとめた記事は以下です。

文字コードを指定する

それでも治らない場合は文字コード指定。

soup = bs4(res.content,'lxml',from_encoding='utf-8')