前提・実現したいこと
python スクリプトで utf8 のサイトの日本語文字をスクレイピングして mysql にいれたい
発生している問題・エラーメッセージ
requests で取得時にも mysql 挿入時にも文字化けする
該当のソースコード
python
1import pymysql 2import requests 3from bs4 import BeautifulSoup 4import settings 5 6res = requests.get('https://news.yahoo.co.jp/') 7print(res.apparent_encoding) # utf-8 8res.encoding = res.apparent_encoding 9# print(res.text) # この時点ですでに文字化け 10 11soup = BeautifulSoup(res.content, "lxml") 12print(soup.original_encoding) # utf-8 13 14text = soup.select_one('title').get_text() 15print(text) # yahoo ニュースとなってほしいのにすでに文字化けする 16 17# MySQL utf8 カラムに保存して取り出す 18mysql = pymysql.connect( 19 host = settings.db_host, 20 user = settings.db_user, 21 password = settings.db_password, 22 db = settings.db_name, 23 charset = settings.db_charset # utf-8 24) 25 26with mysql.cursor() as cursor: 27 sql = ''' 28 INSERT INTO test_table(text) VALUES(%s) 29 ''' 30 cursor.execute(sql, text) 31 mysql.commit() 32 33 sql = ''' 34 SELECT text FROM test_table LIMIT 1 35 ''' 36 cursor.execute(sql) 37 text2 = cursor.fetchone()[0] 38 print(text2) # さらに化ける 39 print(text == text2) # 一致してほしい
試したこと
上記テストコードを実行してファイルにリダイレクトすると以下のようになります
utf-8 utf-8 Yahoo!ƒjƒ…[ƒX Yahoo!???? False
取得した文字も文字化けして
mysql に出し入れするとさらに別の文字になってしまいます
文字コードをどこでどう設定すればいいのでしょうか
補足情報(FW/ツールのバージョンなど)
windows 7 上の MSYS ターミナル
python 3.8
MySQL は 5.7.2 (AWS 上の RDS デフォルト設定)
追記
MAC 上で同じコードを動かしたところ問題なく動作しました
あなたの回答
tips
プレビュー