每日小发现#3 python中空白字符串\xa0问题

问题

某天用scrapy爬数据入Mongo数据库后,业务反馈采集数据出现大量问号【?
对照网页和采集数据分析后,发现是前端代码中出现大量 造成的

复现

scrapy中,response.xpath实际上用的是parsel.Selector,因此我们这里直接用Selector来处理就可以了

from parsel import Selector

html = '<p>you get:"Python&nbsp;"</p>'
selector = Selector(text=html)
content = selector.xpath('string(.)').extract_first()
print(f'content: {content}')
print(f"content bytes: {content.encode('utf8')}")

结果

content: you get:"Python "
content bytes: b'you get:"Python\xc2\xa0"'

进一步的

>>> content  # str.__repr__()
'you get:"Python\xa0"'
>>> print(content)  # str.__str__()
you get:"Python "

经过parsel库的处理,html代码解析出来的正文,会将&nbsp;解析为空白字符
不过此时的空白字符,不是我们常见的空格space(ASCII:\x20),而是\xa0

原因

\xa0 属于 latin1(ISO/IEC_8859-1)中的扩展字符集字符,代表空白符nbsp(non-breaking space)

ISO-8859-1编码是单字节编码,向下兼容ASCII
其编码范围是0x00-0xFF0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号
如果字符串中出现\xa0 ,一般情况下还是直接替换比较好,因为有些数据库并不能解析ISO-8859-1,入库后可能会将\xa0 替换为?,导致数据异常。

解决

解决的话,直接用str.replace替换即可

>>> content.replace('\xa0', ' ')
'you get:"Python "'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值