• bs4 UnicodeEncodeError: 'gbk' codec can't encode character 'xa0'


    Problem:

    写爬虫时,出现了以下错误:

    意思是Unicode编码错误,gbk编解码器不能编码xa0字符。

    爬取信息包含中文,使用BeautifulSoup库解析网页,用get_text()方法获取标签内的文本信息。

    Debug:

    解析:

    当我们获取这个网页的源代码的时候,是将这个网页用utf-8的解码方式将其转换成对应的Unicode字符

    当我们使用print()函数将其打印到Windows系统的DOS窗口上的时候(DOS窗口的编码方式是GBK),自动将Unicode字符通过GBK编码转换为GBK编码方式的str。

    • 出现问题(gbk编解码器不能编码xa0字符)的原因?

    网页源代码中的  的utf-8 编码是:xc2xa0,解析后,转换为Unicode字符为:xa0,当使用print() 显示到DOS窗口上的时候,转换为GBK编码的字符串,但是xa0这个Unicode字符没有对应的 GBK 编码的字符串,所以出现错误。

    Solve:

    用空格 来替换 xa0 ( ):

    方法1:在网页源码上替换 

    在解析之前对r.text中的网页源码的&nbsp进行替换

    soup = BeautifulSoup(html.replace(' ', ' '), 'lxml')
    

      

    方法2:在解析为Unicode之后替代xa0

    在get_text()解析之后对u'xa0'进行替换

    job_detail = soup.select('.job-detail')[0].get_text().replace(u'xa0', ' ')
    

      

     

  • 相关阅读:
    【剑指Offer】34、第一个只出现一次的字符
    【剑指Offer】33、丑数
    【剑指Offer】32、把数组排成最小的数
    linux精彩收集
    shell-总结【摘录】
    linux -特殊符号
    linux --mount
    linux--lsof
    linux--find
    Linux之rsync数据同步服务
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/11703679.html
Copyright © 2020-2023  润新知