前提・実現したいこと
昨日pythonをはじめましたが、
import requestsがうまくいきません。
改善点を指摘お願いします。
以下のようなコードを書き、YahooのHTMLを出力しようとしています。
Python
1#!C:\Program Files\WinPython\python-3.6.5.amd64\python.exe 2# -*- coding: utf-8 -*- 3 4import requests 5 6url = 'http://yahoo.com/' 7 8print("Content-Type: text/plain;charset=utf-8\n\n") 9 10r = requests.get(url) 11 12print(r.status_code) 13 14print(r.headers['content-type']) 15 16print(r.encoding) 17 18print(r.text) 19 20print(r.json()) 21 22print(r.content) 23
発生している問題・エラーメッセージ
出力結果
200 text/html; charset=UTF-8 UTF-8
###やってみたこと
#!C:\Program Files\WinPython\python-3.6.5.amd64\python.exe # -*- coding: utf-8 -*- import requests url = 'http://yahoo.com/' try: print("Content-Type: text/plain;charset=utf-8\n\n") r = requests.get(url) print(r.status_code) print(r.headers['content-type']) print(r.encoding) print(r.text) print(r.json()) print(r.content) except Exception as e: print '=== エラー内容 ===' print 'type:' + str(type(e)) print 'args:' + str(e.args) print 'message:' + e.message print 'e自身:' + str(e) print '処理終了'
⇒500 error
サーバ内部で障害が発生し、 リクエストに応えることができませんでした。
Error message:
End of script output before headers: test.py
補足情報(FW/ツールのバージョンなど)
・python-3.6.5.amd64
・http://localhost:8020 ルートディレクトリで実行
・XAMPPで実行
Twitterでいただいた情報
マイPCに同じ環境を作って試してみました。どうもprint文で文字列をブラウザに出力する際、特定の文字?が含まれていると出力されないようですね。「r.text」を「r.text[0:77342]」のようにして、77342文字目まで出力するようにしたら、出ました。
同様に記述したところ、確かに出力されました。「»」という文字にひっかかるまでは…
Twitterでいただいた情報2
こちらの環境で例外を補足してみたところ、
'cp932' codec can't encode character '\xbb' in position 79453: illegal multibyte sequence
というエラーが確認されました。
軽く調べてみた感じ、Windows環境ではprintの際に内部で自動的に「CP932」というコードへ変換されるらしく、
その際に変換できない文字が含まれていると例外が発生するようです。
とりあえず
print(r.text.encode('cp932', "ignore").decode('utf-8', "ignore"))
とすると変換できない文字は無視するので、何かしら表示できるようになりますが、無視して良いものかどうかは私には判断できません。

回答1件
あなたの回答
tips
プレビュー