1. 程式人生 > >bs4 UnicodeEncodeError: 'gbk' codec can't encode character '\xa0'

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 編碼是:\xc2\xa0,解析後,轉換為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', ' ')

  

 

&n