私はPython2.xのUnicodeについて非常に混乱しています。
私はBeautifulSoupを使用してWebページをスクレイプし、見つけたものを名前をキー、URLを値として辞書に挿入しようとしています。
BeautifulSoupのfind
関数を使用して必要な情報を取得しています。私のコードは次のように始まりました:
name = i.find('a').string
url = i.find('a').get('href')
find
これは、文字列ではなくオブジェクトから返されるthignを除いて、機能します。
これが私を混乱させ始めたものです
str
変数に割り当てる前にタイプに変換しようとすると、がスローされることがありUnicodeEncodeError
ます。
'ascii' codec can't encode character u'\xa0' in position 5: ordinal not in range(128)
私はグーグルで周りにエンコードする必要があることがわかりましたascii
追加してみます:
print str(i.find('a').string).encode('ascii', 'ignore')
運が悪いですが、それでもUnicodeエラーが発生します。
そこから、を使ってみrepr
ました。
print repr(i.find('a').string)
そしてそれはうまくいきます...ほとんど!
ここで新しい問題が発生しました。
すべてが言われ、行われ、辞書が作成されると、私は何にも血まみれにアクセスできなくなります!それは私にを与え続けますKeyError
。
私は口述をループすることができます:
for i in sorted(data.iterkeys()):
print i
>>> u'Key1'
>>> u'Key2'
>>> u'Key3'
>>> u'Key4'
しかし、私がこのようなdictのアイテムにアクセスしようとすると:
print data['key1']
また
print data[u'key1']
また
test = unicode('key1')
print data[test]
それらはすべてKeyErrorsを返しますが、これは私にとって100%混乱しています。それらがUnicodeオブジェクトであることに関係があると思います。
私は思いついたすべてのことを試しましたが、何が起こっているのか理解できません。
おー!奇妙なことに、このコードは次のとおりです。
name = repr(i.find('a').string)
print type(name)
戻り値
>>> type(str)
でも私が物を印刷するだけなら
print name
Unicode文字列として表示されます
>>>> u'string name'