gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:09:01 25 4
gpt4 key购买 nike

过去两周我很难处理用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com