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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

3405閲覧

Python2.7でXPath(lxml使用)の抽出結果をstr型(シフトJIS)のリストで得たい

lemonade

総合スコア10

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2016/04/25 12:18

Python2.7でlxmlのXPathを使って取得した抽出結果のデータを
最終的にシフトJISの文字列型(str型)のリストの形で得たいのですが、
どうもうまくいかず困っています。

xpathを使って抽出されたデータが格納される変数は、
print文で表示可能で一見するとunicode型のリストの形ではあるものの、
中に格納されているデータを組み込み関数のtypeで確認してみると、
「<type 'lxml.etree._ElementUnicodeResult'>」や
「<class 'lxml.etree._ElementStringResult'>」という形式になっています。
これらをstr型(シフトJIS)に変換できないものかと
自分なりにいろいろ試行錯誤してみましたがうまくいかず、
web検索して調べてみても良い解決策が見つかりませんでした。

一体どうすればXPathの抽出結果を
シフトJISの文字列型(str形式)のリストの形で
取得できるでしょうか?

ちなみに、当方の環境は、OSがWindows7(64bit)、
Pythonは2.7.10(32bit)です。

Python

1# coding: cp932 2 3import lxml.html 4 5url = 'http://www.adobe.com/jp/#' 6xpath_query = '//a/text()' 7list = lxml.html.parse(url).xpath(xpath_query) 8 9print type(list) #<type 'list'> 10print list #リストの中身は確認可能。unicode型の文字列のリスト? 11print list[236] #UnicodeEncodeError: 'cp932' codec can't encode character u'\xed' in position 0:illegal multibyte sequence 12print list[236].encode('cp932','ignore') #何も表示されない 13print type(list[236]) #<type 'lxml.etree._ElementUnicodeResult'> 14print type(list[237]) #<class 'lxml.etree._ElementStringResult'>

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のサイトが参考になるかと思います。
http://www.cafe-gentle.jp/challenge/tips/python_tips_003.html#text

投稿2016/04/26 14:41

編集2016/04/26 14:42
yukkeorg

総合スコア985

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

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

toko

2016/04/27 00:42 編集

問題はlxmlの使い方ではなく、そもそもcp932で扱えない文字を変換しようとしていることが原因ではないかと思います。list[236]はハングルでした。
yukkeorg

2016/04/27 03:22

元データについては意識してませんでした。ご指摘ありがとうございました。
lemonade

2016/04/29 14:37

参考になりました。ありがとうございました。 本質問は手違いで同様の質問が二重に存在する事態となってしまっております。 オリジナルはこちら(https://teratail.com/questions/33281)です。 オリジナルの方に解決策があります。 質問を投稿したものの、推敲が足りず、質問を作り直したいと思うに至り、 書き直した質問を新たに投稿した後にすぐに古い方の質問を取り消そうとしたのですが、 取り消すことができない仕様であることに後から気がつきました。 申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問