开发者社区> 吞吞吐吐的> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

python爬虫中文网页cmd打印出错问题解决

简介:
+关注继续查看

问题描述

用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))

解决办法:

A.改变控制台编码

网上查,都说是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))

B.直接改字符编码

顺着这个思路,再一想,改控制台编码那还不如直接改字符编码: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中的代码页是CP936
  • gbk: 21886 -- 在windows中的代码页是CP936
  • gb18030: 27484 -- 在windows中的代码页是CP54936
  • gb13000: 等同于unicode

显然,gb18030 是 gb2312,gbk 的超集

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

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


本文转自罗兵博客园博客,原文链接http://www.cnblogs.com/hhh5460/p/5781389.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python爬虫:scrapy中间件及一些参数
Python爬虫:scrapy中间件及一些参数
34 0
Python爬虫:scrapy查看Cookie值
Python爬虫:scrapy查看Cookie值
42 0
Python爬虫:Scrapy的Crawler对象及扩展Extensions和信号Signa
Python爬虫:Scrapy的Crawler对象及扩展Extensions和信号Signa
49 0
Python爬虫:关于scrapy模块的请求头
Python爬虫:关于scrapy模块的请求头
100 0
Python爬虫之scrapy从入门到忘记
一、初窥scrapy scrapy中文文档 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
875 0
Python爬虫:Scrapy链接解析器LinkExtractor返回Link对象
Python爬虫:Scrapy链接解析器LinkExtractor返回Link对象
26 0
Python爬虫:Scrapy优化参数设置
Python爬虫:Scrapy优化参数设置
51 0
python爬虫之微打赏(scrapy版)
上次写到单线程的微打赏爬虫,知道微打赏需要用post请求,那今天看看如何用scrapy完成post请求。 创建项目 打开cmd,输入以下代码即可创建scrapy项目。
789 0
python爬虫:scrapy可视化管理工具spiderkeeper部署
python爬虫:scrapy可视化管理工具spiderkeeper部署
64 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Python 脚本速查手册
立即下载
Python第五讲——关于爬虫如何做js逆向的思路
立即下载
Python系列直播第一讲——Python中的一切皆对象
立即下载