5

BeautifulSoup3.1.0.1とPython2.5.2を使用し、フランス語でWebページを解析しようとしています。ただし、findAllを呼び出すとすぐに、次のエラーが発生します。

UnicodeEncodeError:'ascii'コーデックは位置1146の文字u'\ xe9'をエンコードできません:序数が範囲内にありません(128)

以下は私が現在実行しているコードです:

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("http://fr.encarta.msn.com/encyclopedia_761561798/Paris.html")
soup = BeautifulSoup(page, fromEncoding="latin1")
r = soup.findAll("table")
print r

誰かがその理由を知っていますか?

ありがとう!

更新:要求されたように、以下は完全なトレースバックです

Traceback (most recent call last):
  File "[...]\test.py", line 6, in <module>
    print r
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1146-1147: ordinal not in range(128)
4

1 に答える 1

11

ここに別のアイデアがあります。お使いの端末は、Python からの Unicode 文字列を表示できません。インタープリターは、最初にそれを ASCII に変換しようとします。印刷する前に明示的にエンコードする必要があります。の正確なセマンティクスはわかりませんsoup.findAll()。しかし、それはおそらく次のようなものです:

for t in  soup.findAll("table"):
    print t.encode('latin1')

t本当に文字列の場合。おそらく、表示したいデータを構築する必要がある別のオブジェクトです。

于 2009-01-20T22:24:20.747 に答える