在爬百度"今日熱點事件排行榜"的時候發現打印在控制台的中文全部顯示亂碼,開始懷疑控制台的原因導致了亂碼,后來輸出一個中文,發現顯示正常。
#-*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup res = requests.get("http://top.baidu.com/buzz?b=341&fr=topbuzz_b1&qq-pf-to=pcqq.discussion") soup = BeautifulSoup(res.text,'lxml') print(soup.head.title.text)
執行代碼控制台返回一串亂碼
查看網頁的源碼發現網頁的編碼方式gbk,BeautifulSoup解析后得到的soup,打印出來是亂碼,實際上其本身已經是正確的(從原始的GB2312編碼)解析(為Unicode)后的了。之所以亂碼,那是因為,打印soup時,調用的是__str__,其默認是UTF-8,所以輸出到GBK的cmd中,才顯示是亂碼(參考一些文章)
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
#-*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup res = requests.get("http://top.baidu.com/buzz?b=341&fr=topbuzz_b1&qq-pf-to=pcqq.discussion") res.encoding = 'gb18030' soup = BeautifulSoup(res.text,'lxml') print(soup.head.title.text)