【发布时间】:2018-03-06 08:29:24
【问题描述】:
我正在使用 Xpath 获取数据,输出有 '\xa0',这是 Unicode。我想消除它,但它返回:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 0: ordinal not in range(128)
这是我的代码:
page_active = requests.get('http://www.marketinout.com/stock-screener/stocks.php?list=volume_leaders&exch=asx')
active = html.fromstring(page_active.content)
data = active.xpath('//tbody/tr/td/text()')
data >>> [u'\xa0', u'\xa0', u'\xa0Bard1 Life Sciences Limited
',
u'\xa0Gold', u'\xa0Basic Materials', u'\xa0ASX', u'\xa07', u'\xa00.025', u'\xa00.015', u'\xa0150.0', u'\xa02
78,097,367', u'\xa0', u'\xa0', u'\xa0Patrys Ltd ...]
为了消除'\xa0',我尝试了[a.replace('\xa0',' ') for a in data],但它返回:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 0: ordinal not in range(128)
我也使用了[a.decode('utf-8').replace("\xa0","") for a in data],但我仍然遇到同样的错误。
【问题讨论】:
-
\xa0只是一个字节,而不是 Unicode。 ASCII 编码文本也是 Unicode 的一部分。 -
另一方面,
u'\xa0'是一个 Unicode 字符串,其 Latin-1 范围代码点为 U+00A0,它在 ASCII 范围之外。'\xa0'只是一个包含 0xA0 字节的字节串。