2012-01-30 6 views
-1

私は今朝、傷ついたWebページから文字列を処理しようとすると、何時間も不愉快な時間を過ごしました。私はキーワードを確認することができるように、抽出された文字列を小文字にする一貫性のある方法を得ることができないと思います。ここBeautifulSoupTag、文字列とUnicodeEncodeErrorがあまり美しくない

はDOM要素からテキストを取得するコードの抜粋である:

temp = i.find('div', 'foobar').find('div') 
if temp is not None and temp.contents is not None: 
    temp2 = whitespace.sub(' ', temp.contents[0]) 
    content = str(temp2) 

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 150: ordinal not in range(128)

Iはまた、次のステートメントを試みた - のどれも働きました。すなわち、それらは同じエラーがスローされるの結果:

content = (str(temp2)).decode('utf-8').lower() 
content = str(temp2.decode('utf-8')).lower() 

誰もが小文字のASCIIにBeautifulSoupTag内に含まれるtehのテキストを変換する方法を知っていたので、私は、キーワード(複数可)のための大文字小文字を区別しない検索を行うことができますか?

+2

を試してみてください:[ドキュメント](http://www.crummy.com/software/BeautifulSoup/documentation.html#BeautifulスープはあなたのUnicode、くそを与える) – methyl

+0

をすることができます'unicode(temp2)'を使うだけですか? –

+0

[あなたとほとんど同じ質問にあなたが受け入れた私の答えを読む](http://stackoverflow.com/q/9012607/4279) – jfs

答えて

2

あなたはASCIIが必要かもしれませんが、Unicodeが必要です。すでに入手している可能性は高いです。 XMLパーサーはunicodeオブジェクトを返します。

まずprint type(temp2)を行う不幸な何かが多分そのwhitespace.sub()ブツのように、起こっていない限り...それはunicodeする必要があります。それは何ですか?

あなたはそれが空白(NO-BREAKのSPACE)ですbecase uは 'XA0を\' 厄介は、消えることになります

temp2 = u' '.join(temp.contents[0].split())

を行い、単一のスペースに複数の空白文字を正規化します。その後

ここで答えを探してみてくださいcontent = temp2.lower()

関連する問題