【发布时间】:2014-07-06 08:47:48
【问题描述】:
我简直想不通! :( 我正在从一个 utf-8 编码的网站上抓取数据,至少它是这么说的:
Content-Type: text/html;charset=utf-8
我正在使用 XPath 选择器 extract() 调用获取常规 unicode 字符串列表:
item['city']= element.select('//div[@id="bubble_2"]/div/text()').extract()
这是列表:
[u'Westbahnhofstr.\xa010', u'72070\xa0T\xfcbingen']
现在我将列表加入一个 unicode 字符串:
item['city']= "".join(element.select('//div[@id="bubble_2"]/div/text()').extract())
到目前为止一切顺利:
u'Beim Nonnenhaus\xa0672070\xa0T\xfcbingen'
当我尝试将此 unicode 字符串输出到屏幕(打印)或文件(写入)时出现问题。无论我尝试什么,它都会返回一个错误 (http://pastebin.com/51DkX2R2):
exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 11: ordinal not in range(128)
当然,我在输出之前已将 unicode 编码为字节字符串:
item['city'].encode('utf-8')
这是我的 pipeline.py 以及我用来打开和写入我的 cvs 的方式:
import csv
import items
import urlparse
import codecs
class DepostPipeline(object):
def __init__(self):
self.modelsCsv = csv.writer(codecs.open('Dees.csv', mode='w',encoding='utf-8'))
self.modelsCsv.writerow(['city'])
def process_item(self, item, spider):
if isinstance(item, items.DetailsItem):
item['city'] = item['city'].encode('utf-8')
self.modelsCsv.writerow([item['city']])
return item
最奇怪的是我的系统(windows上的python)完美地处理了unicode字符串:
C:\Console2>python
Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s=u'Beim Nonnenhaus\xa0672070\xa0T\xfcbingen'
>>> print s
Beim Nonnenhaus 672070 Tübingen
在过去的 10 天里,我一直在阅读有关 utf-8、unicode、编码和解码的大量内容,但似乎我仍然错过了什么?! 感谢您提供任何帮助或建议。
【问题讨论】:
标签: python unicode encoding utf-8 scrapy