用python写爬虫,很多时候我们会先在cmd下先进行尝试。
运行爬虫之后,肯定的,我们想看看爬取的结果。
于是,我们print...
运气好的话,一切顺利。但这样的次数不多,更多地,我们会遇到这样的错误:
UnicodeEncodeError: 'gbk' codec can't encode character好吧,回去检查网页的编码格式:gb2312
代码中也添加了:r.encoding = 'gb2312'
看不出哪里出了问题,应该没问题的啊!
代码如下:
import requests from bs4 import BeautifulSoup url = 'http://bbs.ok226.com/bbs/html/' r = requests.get(url) r.encoding = 'gb2312' soup = BeautifulSoup(r.text, 'html.parser') # 打印 print(soup.get_text(strip=True))网上查,都说是cmd控制台的问题。默认控制台编码gbk
好吧,那就改一下控制台编码,改成gbk的超集gb18030
试试看再说。。。嗯,很好,无报错,但是有乱码,算是解决了问题!
代码如下:
import requests from bs4 import BeautifulSoup url = 'http://bbs.ok226.com/bbs/html/' r = requests.get(url) r.encoding = 'gb2312' soup = BeautifulSoup(r.text, 'html.parser') # 改变控制台编码 import io import sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') # 打印 print(soup.get_text(strip=True))顺着这个思路,再一想,改控制台编码那还不如直接改字符编码:r.encoding = 'gb18030'
试试看再说。哎,没问题了,无报错,无乱码,完美解决!
代码如下:
import requests from bs4 import BeautifulSoup url = 'http://bbs.ok226.com/bbs/html/' r = requests.get(url) r.encoding = 'gb18030' # 注意网页编码是 gb2312 soup = BeautifulSoup(r.text, 'html.parser') # 打印 print(soup.get_text(strip=True))从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。
各种编码字符数目
gb2312: 7445 -- 在windows中的代码页是CP936gbk: 21886 -- 在windows中的代码页是CP936gb18030: 27484 -- 在windows中的代码页是CP54936gb13000: 等同于unicode显然,gb18030 是 gb2312,gbk 的超集
因此,解决问题的思路就是:
如果控制台中,打印中文文本出问题,那就用它的编码的超集进行编码。
转载于:https://www.cnblogs.com/hhh5460/p/5781389.html