python - 通过 scrapy 抓取数据的 unicode 问题

标签 python unicode scrapy decode encode

过去两周我很难处理用 scrapy 抓取的一些数据。我在 windows7 上使用 python 2.7。这是通过 scrapy xpath 选择器抓取和提取的一小段数据:

{'city': [u'Mangenberger Str.\xa0162', u'42655\xa0Solingen']}

这些数据是从 utf-8 编码的页面中抓取的,至少它是这么说的:

Content-Type: text/html;charset=utf-8

所以我相信我需要解码它们才能得到:

Mangenberger Str. 16242655 Solingen

这是我在控制台中得到的内容:

>>> s='Mangenberger Str.\xc2\xa016242655\xc2\xa0Solingen'
>>> s1=s.decode('utf-8')
>>> print s1
Mangenberger Str. 16242655 Solingen

完美! 但这与我运行脚本时收到的结果相去甚远。我尝试编码和解码:

uft-8 encoding
{'city': 'Mangenberger Str.\xc2\xa016242655\xc2\xa0Solingen'}
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 17:

utf-8-sig encoding
{'city': '\xef\xbb\xbfMangenberger Str.\xc2\xa016242655\xc2\xa0Solingen'}
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0:

utf-8 decoding
exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in      position 17:

utf-8-sig decoding
exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 17:

编码代码:

item['city']= "".join(element.select('//div[@id="bubble_2"]/div/text()').extract()).encode('utf-8')

解码代码:

item['city']= "".join(element.select('//div[@id="bubble_2"]/div/text()').extract()).decode('utf-8')

据我所知,当我尝试解码该字符串时,BOM 字节是问题所在?但是为什么它在我的控制台中可以正常工作,而一旦我运行 scrapy 就无法工作(错误)?

最佳答案

Python unicode 字符串中的

\xa0Non-breaking space character

u'Mangenberger Str.\xa0162'u'42655\xa0Solingen' 是完全有效的 unicode 字符串。 Python 可以很好地处理 unicode 字符串。

Scrapy XPath 选择器 extract() 调用可获取 unicode 字符串列表。始终处理 unicode 通常是正确的选择。

我不建议将 unicode 字符串编码为 scrapy 代码中的其他内容。 (它是您之后的编码,解码是针对非 unicode 字符串将其转换为 unicode 字符串)

对字符串进行编码的唯一有意义的步骤是在最后导出数据(CSV、XML)时,甚至已经处理了。

也许您可以解释一下这些 un​​icode 字符串给您带来麻烦的原因。

关于python - 通过 scrapy 抓取数据的 unicode 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536456/

相关文章:

python - 一旦行数大于 N,就删除 MySQL 表的前 X 行

python - Pygame 在类中绘图

python - Python 字符串比较_真正_是如何工作的?

python - 在终端中启动 scrapyd 时发生 fatal error

python-3.x - 重复地从相同的 url 中抓取数据,但有时间延迟

python - 如何使用 Python Scrapy 模块列出我网站上的所有 URL?

python - Python 中的链表实现错误

java - char 到 Unicode 比 Java 中的 U+FFFF 多?

c++ - UTF-8、Unicode 以及机器如何解释字节?

python - 需要关闭 Twitter 连接吗?