2012-01-30 10 views
4

私はBeautifulSoupを使ってウェブページからデータをスクラップしています。私はウェブサイトのデータと.txtドキュメントのテキストを比較したいと思います。しかし、私はエンコードの問題があるようです。 (なしのhtmlエンティティ):Pythonエンコードの問題:度記号など

source = "my url".read() 
.... 
soup = BeautifulSoup(source)  

ウェブサイトはbeautifulSoupを使用して

は、ウェブサイトが読み込まれたテキストテキストはまた、「ソースの表示」で、次のように表示された「400°への熱オーブン」を持っています

テキスト文書は、新しいテキスト文書を "BOMなしでUTF-8でエンコード"としてエンコードすることによって作成されました。私はウェブサイトからテキスト文書に "heat oven to 400°"をコピー&ペーストして保存しました。私は2つの文字列を比較するとき

テキストファイルが

f = codecs.open('myfilename', encoding='utf-8') 

として読み取られ、彼らは同じではありませんが、私は彼らがなりたいです。

何が起きているのか:Eclipseでは、2つのテキストを分割し、デバッグモードの変数を見て、BeautifulSoupからの度数記号が\ xc2 \ xb0と表示されていることがわかります。テキスト文書の度数記号は\ xb0と表示されます。

なぜ、どうすれば修正できますか?私は多くの特別な文字でこの問題を抱えているので、私は一般的な解決策が必要です。また、いくつかのサイトのデータをテキスト文書にコピー&ペーストします。

+0

のWindows 1252でのエンコードで美しいスープの最後の手段推測、と誤解されたときにあなたが得るものですhttp://stackoverflow.com/search?q=[python]+beautifulsoup+encoding –

+0

テキストファイルのエンコーディングを知っており、それを適切に使用していますが、ウェブサイトのエンコーディングは考慮されていません。基本的には、同じエンコーディングの場合は、バイトを(実際に行っているように)比較したり、ユニコード文字列を比較するだけです(バイトを取り出し、正しいエンコーディングを使用して解釈する必要があります)。 – Cameron

+0

あなたの努力にもかかわらず、あなたのテキスト文書はUTF-8でないように見えます。あるいは、HTMLが何らかの形で二重にエンコードされていても(違いをどのように診断したかは正確には分かりませんが、情報を追加したい場合はファイルの単純な16進数ダンプが役立ちます)。 – tripleee

答えて

1

Beautiful Soupのように見えますが、エンコーディングを正しく検出するために必要なものはありません。 BeautifulSoup(source)をBeautifulSoup(source、fromEncoding = 'UTF-8')に置き換えることによってヒントを与えることができます。その他のオプションと情報はオンラインで "Beautiful Soup Gives You Unicode, Dammit"です。

バイト「\ XC2 \ XB0」Unicodeコード・ポイントU + 00B0のUTF-8エンコーディングが

+0

はい、ありがとう、これは問題であることが判明したものであり、ひねりをかいています。私はスープを作る前にソースを変更していました。美しいし、もはやエンコーディングを認識しません。上記の私のコメントを参照してください "申し分なく、それを考え出した"。 – user984003