lxml を使用して HTML ドキュメント内のすべてのテキスト ノードを取得しようとすると、この問題が発生しますが、 UnicodeEncodeError: が発生し'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128)
ます。encoding = chardet.detect(response)['encoding']
しかし、このページ ( )のエンコーディングの種類を調べようとすると、 と表示されますutf-8
。1 つのページに utf-8 と ascii があるのは奇妙に思えます。実際、これは:
fromstring(response).text_content().encode('ascii', 'replace')
問題を解決します。
これが私のコードです:
from lxml.html import fromstring
import urllib2
import chardet
request = urllib2.Request(my_url)
request.add_header('User-Agent',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)')
request.add_header("Accept-Language", "en-us")
response = urllib2.urlopen(request).read()
print encoding
print fromstring(response).text_content()
出力:
utf-8
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128)
この問題を解決するにはどうすればよいですか? 他のいくつかのページでこれを行いたいので、個別にエンコードしたくないことに注意してください。
アップデート:
たぶん、ここで何か他のことが起こっています。ターミナルでこのスクリプトを実行すると、正しい出力が得られますが、SublimeText 内で実行すると、UnicodeEncodeError が発生します... ¿
更新 2:
この出力でファイルを作成するときにも発生します。.encode('ascii', 'replace')
動作していますが、より一般的な解決策が必要です。
よろしく