2016-04-14 10 views
6

私は美しいスープをPythonで学んでいます。ユニコードのテキストを通常のテキストに変換するには

私は書籍のリストで簡単なWebページを解析しようとしています。私は以下のコードを使用し

例えば

<a href="https://www.nostarch.com/carhacking">The Car Hacker’s Handbook</a> 

import requests, bs4 
res = requests.get('http://nostarch.com') 
res.raise_for_status() 
nSoup = bs4.BeautifulSoup(res.text,"html.parser") 
elems = nSoup.select('.product-body a') 

#elems[0] gives 
<a href="https://www.nostarch.com/carhacking">The Car Hacker\u2019s Handbook</a> 

そして

#elems[0].getText() gives 
u'The Car Hacker\u2019s Handbook' 

しかし、私はで与えられる適切なテキストをしたい、「車のハッカーのハンドブック」出力を代わりに与えるために私のコードを変更する方法

s = elems[0].getText() 
print s 
>>>The Car Hacker’s Handbook 

「自動車ハッカーのハンドブック」の「?

助けてください。

+3

結果に間違いはありません。それは、素晴らしいアポストロフィー文字を持つUnicode文字列です。 – Selcuk

+0

ありがとう、@セルク。 しかし、その文字列 "u'The Car Hacker \ Handbook"を使ってファイル/データベースに保存する方法は? 正しく保存されますか?私は 'f.write(elems [0] .getText())'を試したことを意味し、UnicodeEncodeErrorを得ました。 –

+0

ありがとう、@セルク。わかった。 ファイルやデータベースに保存するために 'elems [0] .getText()。encode( 'utf-8')'を使用しました。 –

答えて

3

エンコード方法を試しましたか? Unicodeとのpythonについて

elems[0].getText().encode('utf-8') 

詳細情報がさらにhttps://docs.python.org/2/howto/unicode.html

で見つけることができ

、あなたの文字列が実際にUTF-8である場合に発見するためにあなたが chardetを使用して、次のコマンドを実行することができエンコード:

>>> import chardet 
>>> chardet.detect(elems[0].getText()) 
{'confidence': 0.5, 'encoding': 'utf-8'} 
+0

ありがとうございます。 私は 'elems [0] .getText()。encode( 'utf-8')'を試しました。出来た。 Pythonターミナルは '' The Car Hacker \ xe2 \ x80 \ x99s Handbook ''と表示しますが、ファイルに書き込まれた場合、ファイル内容に 'The Car Hacker's Handbook'があります。 –

+0

Cool。私は正確さのために答えを編集しました。 – mschuh

+1

@madhusudan_kようこそ。あなたがこの回答であなたが探していたものを解決すると思ったら、投票数のすぐ下の矢印をクリックして回答を受け入れることを忘れないでください。 – Blaszard

-2

あなたはこれが変換されます

import unicodedata 

def normText(unicodeText): 
return unicodedata.normalize('NFKD', unicodeText).encode('ascii','ignore') 

を試すことができますunicodetextをプレーンテキストに変換し、ファイルに書き込むことができます。

+0

「アポストロフィー」も削除され、書籍タイトルは「The Car Hackers Handbook」になります。 – BlackJack

関連する問題