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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

345閲覧

スクレイピング時に文字コードの制御がうまくできない

退会済みユーザー

退会済みユーザー

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

1クリップ

投稿2017/12/31 03:49

編集2017/12/31 04:50

###前提・実現したいこと
ターミナルからPythonコマンドを実行することでスクレイピングを行おうとしています。

###発生している問題・エラーメッセージ
以下がスクレイピング実行例です。下記のWebページから商品タイトルを取得しようとしていますが、文字化けが発生している状態です。ターミナルの文字コードはUnicodeにしています。
対象Webページ

>>> import requests >>> import lxml.html >>> r = requests.get("http://www.shoeisha.co.jp/book/detail/9784798146072") >>> html = r.text >>> root = lxml.html.fromstring(html) >>> titleH1 = root.xpath("/html/body/div[1]/section/h1") >>> print(titleH1[0].text) iPhone??Android???ץ???ݶ?ץ?????ߥ????????????? ??2?? //「iPhone&Androidアプリ内課金プログラミング完全ガイド 第2版」と表示されて欲しい

###補足情報(言語/FW/ツール等のバージョンなど)
Python 3.6.0
Mac OS high Sierra
ターミナル バージョン2.8
イメージ説明

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

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

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

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

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

KojiDoi

2017/12/31 06:47

やってみましたが、私の環境では問題なく表示できました。提示されているコードの問題ではないような気がします。スクレイピング以外で定義した文字列データはちゃんと表示されるのでしょうか。
退会済みユーザー

退会済みユーザー

2017/12/31 09:43

コメントいただきましてありがとうございます。スクレイピング以外で定義した文字列データについて具体的にはどのようなものを確認すべきでしょうか。
KojiDoi

2017/12/31 09:48

a="あああ"とかそういう文字列をprint(a)したときは異常はないですか。次にprint(html)はどうですか。「文字化け」をだれが起こしているのか問題を切り分ける必要があるでしょう。
退会済みユーザー

退会済みユーザー

2018/01/02 00:35

ご説明いただきましてありがとうございます。>>> a = "あああ" >>> print(a)は問題なく表示されました。
KojiDoi

2018/01/03 02:50

print(html)はどうですか。
KojiDoi

2018/01/04 10:21

html = r.textを忘れてませんか?
退会済みユーザー

退会済みユーザー

2018/01/07 05:06

お返事いただきましてありがとうございます。返信が遅れて申し訳ございません。html = r.textはどこに明記するのでしょうか。お手数おかけしますが、文字化けの原因を明らかにするために打ち込むべきものの全体を指示いただけると助かります。回答欄を使っていただいて構いません。
退会済みユーザー

退会済みユーザー

2018/01/07 05:08

どこにというのは、変数rにhttp以下を代入し、html = r.textとしてprint(html)と入力するとSyntaxError: invalid syntaxが表示されたので順番を教えていただきたいです。
KojiDoi

2018/01/07 05:09

質問文にあるとおりに実行していたなら、 not defined は考えられないので、実はhtmlへの代入を忘れているのではないかと推測したわけです。本来ならprint(html)で、参照先のhtmlの内容が丸ごと表示されるはずです。
退会済みユーザー

退会済みユーザー

2018/01/07 05:12

かしこまりました。再度質問させていただいたコードを実行したところ、文字化けは起こりませんでした。
退会済みユーザー

退会済みユーザー

2018/01/07 05:13

コメント欄で何度も相談に乗ってくださってありがとうございました。ベストアンサーをつけさせていただきたいので、可能であれば回答欄に何かしらご回答いただけますと幸いです。
guest

回答1

0

ベストアンサー

こういう場合の解決方法はいろいろ考えられるでしょうが、素朴でどのような環境でも使える「中間処理の内容を行ごとにprintで出力してみて、問題が発生している個所を突き止める」手法が有効な事例だったように思います。

投稿2018/01/07 08:34

KojiDoi

総合スコア13671

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

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

退会済みユーザー

退会済みユーザー

2018/01/09 02:54

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問