質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1726閲覧

Python・requestsの文字化けについて

Tochan

総合スコア56

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/07/10 10:48

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
pythonでimport requestsで楽天のhtmlサイト(https://search.rakuten.co.jp/search/keyword/)を読み込んだところ文字化けしてしまいます。原因がわかりません。

該当のソースコード

import requests
r = requests.get('https://search.rakuten.co.jp/search/keyword/')
r.encoding = r.apparent_encoding
print(r.apparent_encoding)
print(r.text)

試したこと

楽天のトップページや商品ページなどは文字化けせずに読み込めます。どこが悪いのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2019/07/10 10:59

実行環境の詳細を追記いただけますでしょうか。
Tochan

2019/07/10 13:55

python 初心者で大変申し訳ありません。 グーグルColaboratoryとpyCharmの両方で試しましたが文字化けします。 これで大丈夫でしょうか?
guest

回答1

0

ベストアンサー

plain

1>>> import requests 2 3>>> r = requests.get('https://search.rakuten.co.jp/search/keyword/') 4 5>>> r.apparent_encoding 6'Windows-1254' 7 8>>> import chardet 9 10>>> chardet.detect(r.content) 11{'encoding': 'Windows-1254', 'confidence': 0.3693754690993527, 'language': 'Turkish'}

トルコ語に認識されています。

EUCを明に指定してdeocdeしても失敗します。

plain

1>>> r.content.decode('euc_jp') 2Traceback (most recent call last): 3 File "<stdin>", line 1, in <module> 4UnicodeDecodeError: 'euc_jp' codec can't decode byte 0x8b in position 1568: illegal multibyte sequence 5 6'euc_jp' codec can't decode byte 0x8b in position 1568: illegal multibyte sequence

そのページにEUCとして不正なバイトが存在するだけかと思います。

r.content.decode('euc_jp', errors='ignore')でもエラー箇所の後を復元できなかったので、バイト列を人間が見てエラーを取り除くコードを自作するしかないのでは、と思いました。

投稿2019/07/11 01:35

編集2019/07/11 02:57
quickquip

総合スコア11040

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tochan

2019/07/11 06:55 編集

ありがとうございます。
Tochan

2019/07/11 06:55 編集

同じEUC-JPのページは読み込めるのになぜ??と原因がわからず填まってしまっていました。 そのページに問題がある、ということもあるんですね。 勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問