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 的超集
因此,解决问题的思路就是:
如果控制台中,打印中文文本出问题,那就用它的编码的超集进行编码。
python爬虫中文网页cmd打印出错问题解决的更多相关文章
- python爬虫抓网页的总结
python爬虫抓网页的总结 更多 python 爬虫 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自 ...
- python爬虫中文乱码解决方法
python爬虫中文乱码 前几天用python来爬取全国行政区划编码的时候,遇到了中文乱码的问题,折腾了一会儿,才解决.现特记录一下,方便以后查看. 我是用python的requests和bs4库来实 ...
- Python爬虫之网页图片抓取
一.引入 这段时间一直在学习Python的东西,以前就听说Python爬虫多厉害,正好现在学到这里,跟着小甲鱼的Python视频写了一个爬虫程序,能实现简单的网页图片下载. 二.代码 __author ...
- Python爬虫解析网页的4种方式 值得收藏
用Python写爬虫工具在现在是一种司空见惯的事情,每个人都希望能够写一段程序去互联网上扒一点资料下来,用于数据分析或者干点别的事情. 我们知道,爬虫的原理无非是把目标网址的内容下载下来存储到内存 ...
- python爬虫 前程无忧网页抓取
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- Python爬虫中文小说网点查找小说并且保存到txt(含中文乱码处理方法)
从某些网站看小说的时候经常出现垃圾广告,一气之下写个爬虫,把小说链接抓取下来保存到txt,用requests_html全部搞定,代码简单,容易上手. 中间遇到最大的问题就是编码问题,第一抓取下来的小说 ...
- python爬虫之网页解析
CSS Selector 与Xpath path = ‘D:\\Postgraduate\\Python\\python_projects\\Python视频 分布式 爬虫Scrapy入门到精通\\第 ...
- Python 爬虫 去掉网页注释,去掉网页注释
在爬虫中,我们遇到了网页注释的问题,这些内容,第一,耗费内存资源,第二,在解析网页的时候,不易匹配出来信息.那么我们该如何去掉他们呢??? 我们可以去使用正则去过滤掉他们 方法如下 result = ...
- python爬虫中文乱码问题(request方式爬取)
https://blog.csdn.net/guoxinian/article/details/83047746 req = requests.get(url)返回的是类对象 其包括的属性有: r ...
随机推荐
- unity下载文件三(http异步下载)
异步下载,顾名思义就是不影响你主线程使用客户端的时候,人家在后台搞你的明堂. 直接入主题,既然要下载,首先得请求,请求成功之后进行回调,这就是一个异步过程,异步回调的时间不可控. 1.首先请求下载. ...
- Java 实现多线程的三种方式
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Main { pu ...
- IOS之UIImageView--小实例项目--带音效的拳皇动画
内容大纲: 1.初步工作 2.开始敲代码 3.注意 4.可能遇到的错误 5.设置音频速率在代码顺序上的注意点 带音效的拳皇动画实例项目 初步工作 1.新建一Objective-C工程之后,将需要的拳皇 ...
- Objective-C的可变是如何实现的?
Objective-C的可变是怎么实现的?
- Hive安装与配置(靠谱亲测)
Hive是hadoop生态环境的组成之一.通过Hive,可以使得直接用SQL操作HDFS.最大的好处就是让熟悉SQL,但是不了解JAVA的数据分析师使用.其机制就是一个将SQL语言转化为MapRed ...
- Navicat for Mysql远程连接数据时报(1045错误)Access denied for user 'root'@'localhost' (using password yes);
原因:用户访问被拒绝,更改用户赋予密码即可 mysql命令行执行语句如下 //使用mysql,读取表信息 //更改用户赋予登录密码 //更新权限 注意点:使用flush privileges是为了刷新 ...
- docker-3 基础命令
创建镜像 创建镜像的方法有三种: 基于已有的容器创建 基于本地模板导入 基于dockerfile 基于已有的容器创建 主要使用docker commit 命令,命令格式: docker commit ...
- C#程序调用cmd执行命令
对于C#通过程序来调用cmd命令的操作,网上有很多类似的文章,但很多都不行,竟是漫天的拷贝.我自己测试整理了一下. 代码: string str = Console.ReadLine(); Syste ...
- 关于Redis中的字符串对象
一.SDS redis中定义Object types有5种 /* Object types */ #define REDIS_STRING 0 #define REDIS_LIST 1 #define ...
- ARP协议的报文格式
原文链接地址:http://www.cnblogs.com/laojie4321/archive/2012/04/12/2444187.html 结构ether_header定义了以太网帧首部:结 ...