zoukankan      html  css  js  c++  java
  • 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', ' ')
    

      

     

  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/11703679.html
Copyright © 2011-2022 走看看