博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python爬虫中文网页cmd打印出错问题解决
阅读量:5923 次
发布时间:2019-06-19

本文共 1463 字,大约阅读时间需要 4 分钟。

问题描述

用python写爬虫,很多时候我们会先在cmd下先进行尝试。

运行爬虫之后,肯定的,我们想看看爬取的结果。

于是,我们print...

运气好的话,一切顺利。但这样的次数不多,更多地,我们会遇到这样的错误:

UnicodeEncodeError: 'gbk' codec can't encode character

好吧,回去检查网页的编码格式:gb2312

代码中也添加了:r.encoding = 'gb2312'

看不出哪里出了问题,应该没问题的啊!

代码如下:

import requestsfrom bs4 import BeautifulSoupurl = '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))

解决办法:

A.改变控制台编码

网上查,都说是cmd控制台的问题。默认控制台编码gbk

好吧,那就改一下控制台编码,改成gbk的超集gb18030

试试看再说。。。嗯,很好,无报错,但是有乱码,算是解决了问题!

代码如下:

import requestsfrom bs4 import BeautifulSoupurl = 'http://bbs.ok226.com/bbs/html/'r = requests.get(url)r.encoding = 'gb2312'soup = BeautifulSoup(r.text, 'html.parser')# 改变控制台编码import ioimport syssys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')# 打印print(soup.get_text(strip=True))

B.直接改字符编码

顺着这个思路,再一想,改控制台编码那还不如直接改字符编码:r.encoding = 'gb18030'

试试看再说。哎,没问题了,无报错,无乱码,完美解决!

代码如下:

import requestsfrom bs4 import BeautifulSoupurl = 'http://bbs.ok226.com/bbs/html/'r = requests.get(url)r.encoding = 'gb18030' # 注意网页编码是 gb2312soup = BeautifulSoup(r.text, 'html.parser')# 打印print(soup.get_text(strip=True))

总结

从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。

各种编码字符数目

  • gb2312: 7445 -- 在windows中的代码页是CP936
  • gbk: 21886 -- 在windows中的代码页是CP936
  • gb18030: 27484 -- 在windows中的代码页是CP54936
  • gb13000: 等同于unicode

显然,gb18030 是 gb2312,gbk 的超集

因此,解决问题的思路就是:

如果控制台中,打印中文文本出问题,那就用它的编码的超集进行编码

转载地址:http://dvavx.baihongyu.com/

你可能感兴趣的文章
jenkins+maven+git 实现自动化部署
查看>>
linux就该这么学第八课-磁盘分区和挂载,磁盘限额
查看>>
python 之队列
查看>>
SQL Server 储存过程的output 参数
查看>>
JAVA_OPTS
查看>>
OSGI项目中获取文件路径
查看>>
php利用smtp类轻松的发送电子邮件
查看>>
初学Node(三)模块系统
查看>>
关于SQL的常用操作(增、删、改、查)
查看>>
discuz+ecmall+phpcms整合
查看>>
关于java中assert(断言)的使用讲解
查看>>
vi/vim学习
查看>>
新博客,新生活
查看>>
安卓权威编程指南 - 第五章学习笔记(两个Activity)
查看>>
POJ3630Phone List(字典树)
查看>>
初学iBATIS的朋友,如果你不看我这篇文章,你一定后悔,因为它官方文档里面的示例少一个...
查看>>
salt 使用state的sls来批量管理用户
查看>>
长沙集训09.22
查看>>
day02
查看>>
常见操作
查看>>