Scrapy如何处理英镑符号?

时间:2014-10-15 15:23:59

标签: python scrapy

我是Python和Scrapy的新手,我正在尝试测试一个字符串(使用xpath选择器提取)是否包含英镑符号(英国货币 - £)。

在我的源文件顶部,我指定了编码:

# -*- coding: latin-1 -*-

我正在进行这项测试:

if '£' in price:
...

但是我收到错误例外.UnicodeDecodeError:'ascii'编解码器无法解码字节0xc2。

如果我将测试更改为

price = price.encode('utf-8')
if '£' in price:
...

有效。有人可以解释为什么price.encode()调用是必要的,我知道Scrapy无论如何都会返回unicode字符串。非常感谢

1 个答案:

答案 0 :(得分:1)

# these have different types:
if some_string in some_unicode_object

这样做相当于写作:

# convert the first argument so we can do the `in`
if some_string.decode('ascii') in some_unicode_object

所以在你的例子中:

if '£' in price:
#  ^string ^unicode

您正在调用'£'.encode('ascii'),因为它不是ASCII字节字符串而失败。

更好的写作方式是:

if u'£' in price:

或者,您可能想要写from __future__ import unicode_literals