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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2203閲覧

Pythonクローリングしてきた日本語が文字化けしちゃう

borialis14

総合スコア16

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/15 06:45

編集2019/05/15 06:57

前提・実現したいこと

Pythonクローリング&スクレイピング
https://gihyo.jp/book/2017/978-4-7741-8367-1
という本で勉強しています。

mac OS 10.14.4
iTerm2で自身のpythonコードを実行したところ、
クローリングしてきた文字がuXXXXと表記されるように
なってしまいました。

どなたか解決策をご存じの方はいらっしゃいませんか?

よろしくお願いします。

発生している問題・エラーメッセージ

$ python python_crawler_4.py {'url': u'https://gihyo.jp/dp/ebook/2019/978-4-297-10576-1', 'content': [u'Part1\u521d\u4e2d\u7d1a\u8005\u306e\u3064\u307e\u305a\u304d\u306b\u52b9\u304f\u3010\u304a\u52a9\u3051\u3011\u30c6\u30af\u30cb\u30c3\u30af', u'Part2\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u5236\u3059\u8005\u304c\u30de\u30af\u30ed\u3092\u5236\u3059\u3010\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3011\u30c6\u30af\u30cb\u30c3\u30af',

該当のソースコード

python

1import re 2import requests 3import lxml.html 4 5def main(): 6 session = requests.Session() 7 response = requests.get('https://gihyo.jp/dp') 8 urls = scrape_list_page(response) 9 for url in urls: 10 response = session.get(url) 11 ebook = scrape_detail_page(response) 12 print(ebook) 13 break # first, break for only once 14 15def scrape_list_page(response): 16 root = lxml.html.fromstring(response.content) 17 root.make_links_absolute(response.url) 18 19 for a in root.cssselect('#listBook a[itemprop="url"]'): 20 url = a.get('href') 21 yield url 22 23def scrape_detail_page(response): 24 root = lxml.html.fromstring(response.content) 25 ebook = { 26 'url': response.url, 27 'title': root.cssselect('#bookTitle')[0].text_content(), 28 'price': root.cssselect('.buy')[0].text.strip(), 29 'content': [normalize_spaces(h3.text_content()) for h3 in root.cssselect('#content > h3')], 30 } 31 return ebook 32 33def normalize_spaces(s): 34 return re.sub(r'\s+', '', s).strip() 35 36 37if __name__ == '__main__': 38 main() 39 40

試したこと

たくさん。もうどうすればいいかわかんないので助けてください。

補足情報(FW/ツールのバージョンなど)

前章のローカル環境にてMongDBのインストール&活用する段階で文字化けが発生し始めました。
下記の方と同じことが起こり、requestやlxmlの再インストールなどこねくり回している間に文字化けがいつの間にか起こっていたように思います。
https://teratail.com/questions/98654

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

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

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

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

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

CHERRY

2019/05/15 06:48

質問が途中で切れているようです。 質問を編集して、質問の内容を記載していただけないでしょうか?
guest

回答2

0

ベストアンサー

python2で実行している可能性が高いです。以下のようなコードを実行して確認できます。確認してみてください。

python

1import sys;print(sys.version)

python2ではunicode文字列は「ascii文字で表現可能な」形式で表現される場合があります。実際のデータには問題ありません。

以下の例を見てください。

python2

1>>> s = u"ほげ" 2>>> s 3u'\u307b\u3052' 4>>> print s 5ほげ

辞書やリストの中に含まれている場合はそのような表示になりますが、実際に要素を取り出して表示すればちゃんとした文字列になっているはずです。

ただし、python2は今年いっぱいでサポートが終了します。

Python 2.7 Countdown

また、その本もpython3を前提に書かれているようです。

2系のサポートは2020年で打ち切られる予定になっていることもあり、今から使いはじめるのであれば3系を使うのがオススメです。本書ではPython 3のみを使用し、Python 3.5.1(OS X)とPython 3.4.3(Ubuntu)を対象として解説します。
https://image.gihyo.co.jp/assets/files/book/2017/978-4-7741-8367-1/9784774183671-01.pdf

なので、そのまま進めるよりはまずpython3の導入を先に行った方が良いでしょう。

投稿2019/05/15 06:52

編集2019/05/15 06:55
hayataka2049

総合スコア30933

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

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

borialis14

2019/05/15 07:00

ご丁寧にありがとうございます。確かにpython2.7.16で実行していました。 python3で実行してみます。
guest

0

解決方法:仮想環境を再立ち上げし、その環境上でpythonを実行する

自身がド初心者だったのがはっきりしました。気にかけてくださった皆様、ありがとうございます。
主な原因は、venvを使った仮想環境上でpythonを実行していたのをすっかり失念していたためです。
書籍内の第2章で紹介される仮想環境を立ち上げてから一度もiTerm2を落としておらず、
MongoDBでエラーが発生したタイミングでiTerm2を立ち上げなおし、仮想環境の再立ち上げをしていませんでした。

また、Pythonのversionを調べると、2.7.16と3.7.3が同居していたため、
下記リンク先を参考に、Python3がデフォルトで実行するようにしました。
https://qiita.com/sebeckawamura/items/4bc5945245877f250d2e
→   ./bash_profileにalias python="python3"
ただ、基本的には必要なライブラリ群を仮想環境上にインストールしていたため、
仮想環境上でpython勉強を続けていきます。(が故にまた何か起こるかもしれないですが...)

投稿2019/05/15 08:31

borialis14

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問