2012-01-09 6 views
2

ファイルにpage_sourceをダウンロードしようとしています。しかし、私が取得するたびに:Python unicodeエラーなしでhtmlをダウンロード

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 (or something else) in 
position 8304: ordinal not in range(128) 

私はvalue.encode('utf-8')を使用して試してみたが、それは同じ例外をスローするたびに(加えて、手動ですべての非ASCII文字を置き換えるためにしようとする)ようです。 htmlを「書き込み可能」形式にするための「前処理」する方法はありますか?

+0

ファイルの実際のエンコーディングとは何ですか? –

+0

UTF8の_instead of_ ASCIIを使用してください。 – SLaks

答えて

3

BeautifulSoupおよびlxmlのような第三者のライブラリがあり、エンコードの問題を自動的に処理できます。

まずダウンロード非ASCII文字を含むいくつかのWebページ:しかし、ここだけurlllib2を使用して粗製の例です

>>> import urllib2 
>>> response = urllib2.urlopen('http://www.ltg.ed.ac.uk/~richard/unicode-sample.html') 
>>> data = response.read() 

は今、ページ上部の「文字セット」の外観を持っている:

>>> data[:200] 
'<html>\n<head>\n<title>Unicode 2.0 test page</title>\n<meta 
content="text/html; charset=UTF-8" http-equiv="Content-type"/>\n 
</head>\n<body>\n<p>This page contains characters from each of the 
Unicode\ncharact' 

明白な文字セットがない場合、とにかく「UTF-8」は通常は良い推測です。

最後に、UnicodeテキストにWebページを変換します。

>>> text = data.decode('utf-8') 
+0

ありがとう、これは私の問題を解決しました。基本的なpythonスクリプトを使ってページをダウンロードすると、xce \ xbf \ xb9などのHTMLページが表示されました。 –

1

確かにわかりませんが、http://www.crummy.com/software/BeautifulSoup/には整形されたHTMLを返す関数.prettify()があります。あなたは "前処理"のためにそれを試してみることができます。 >unicode - - >utf-8あなたがstrに行く必要がある場合、>utf-8 -

1

問題は、あなたがstrを行くしようとしているということはおそらくです。つまり、unicode(s, 'utf-8').encode('utf-8')を試してください。

詳細はhttp://farmdev.com/talks/unicode/を参照してください。

関連する問題