问题描述

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

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

于是,我们print...

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

  1. UnicodeEncodeError: 'gbk' codec can't encode character

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

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

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

代码如下:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. url = 'http://bbs.ok226.com/bbs/html/'
  4. r = requests.get(url)
  5. r.encoding = 'gb2312'
  6. soup = BeautifulSoup(r.text, 'html.parser')
  7. # 打印
  8. print(soup.get_text(strip=True))

解决办法:

A.改变控制台编码

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

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

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

代码如下:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. url = 'http://bbs.ok226.com/bbs/html/'
  4. r = requests.get(url)
  5. r.encoding = 'gb2312'
  6. soup = BeautifulSoup(r.text, 'html.parser')
  7. # 改变控制台编码
  8. import io
  9. import sys
  10. sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
  11. # 打印
  12. print(soup.get_text(strip=True))

B.直接改字符编码

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

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

代码如下:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. url = 'http://bbs.ok226.com/bbs/html/'
  4. r = requests.get(url)
  5. r.encoding = 'gb18030' # 注意网页编码是 gb2312
  6. soup = BeautifulSoup(r.text, 'html.parser')
  7. # 打印
  8. 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打印出错问题解决的更多相关文章

  1. python爬虫抓网页的总结

    python爬虫抓网页的总结 更多 python 爬虫   学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自 ...

  2. python爬虫中文乱码解决方法

    python爬虫中文乱码 前几天用python来爬取全国行政区划编码的时候,遇到了中文乱码的问题,折腾了一会儿,才解决.现特记录一下,方便以后查看. 我是用python的requests和bs4库来实 ...

  3. Python爬虫之网页图片抓取

    一.引入 这段时间一直在学习Python的东西,以前就听说Python爬虫多厉害,正好现在学到这里,跟着小甲鱼的Python视频写了一个爬虫程序,能实现简单的网页图片下载. 二.代码 __author ...

  4. Python爬虫解析网页的4种方式 值得收藏

    用Python写爬虫工具在现在是一种司空见惯的事情,每个人都希望能够写一段程序去互联网上扒一点资料下来,用于数据分析或者干点别的事情. ​ 我们知道,爬虫的原理无非是把目标网址的内容下载下来存储到内存 ...

  5. python爬虫 前程无忧网页抓取

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  6. Python爬虫中文小说网点查找小说并且保存到txt(含中文乱码处理方法)

    从某些网站看小说的时候经常出现垃圾广告,一气之下写个爬虫,把小说链接抓取下来保存到txt,用requests_html全部搞定,代码简单,容易上手. 中间遇到最大的问题就是编码问题,第一抓取下来的小说 ...

  7. python爬虫之网页解析

    CSS Selector 与Xpath path = ‘D:\\Postgraduate\\Python\\python_projects\\Python视频 分布式 爬虫Scrapy入门到精通\\第 ...

  8. Python 爬虫 去掉网页注释,去掉网页注释

    在爬虫中,我们遇到了网页注释的问题,这些内容,第一,耗费内存资源,第二,在解析网页的时候,不易匹配出来信息.那么我们该如何去掉他们呢??? 我们可以去使用正则去过滤掉他们 方法如下 result = ...

  9. python爬虫中文乱码问题(request方式爬取)

    https://blog.csdn.net/guoxinian/article/details/83047746   req = requests.get(url)返回的是类对象 其包括的属性有: r ...

随机推荐

  1. HTML5 -1- 简介

    在介绍HTML5之前我们应该先了解一下HTML5 我想从下面开始简单了解一下HTML5 什么是HTML5??? HTML5 即HTML 5.0 版本 正式制定时间是在2014年 遵循着移动先行(前四个 ...

  2. iOS-多线程--(pthread/NSThread/GCD/NSOperation)--总结

    零.线程的注意点(掌握) .不要同时开太多的线程(~3条线程即可,不要超过5条) .线程概念 > 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件 > 子线程 : 后台线程,异 ...

  3. Objective-C之Protocol

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  4. Volley源码分析(1)----Volley 队列

    Android网络框架很多,但是基于Google自己的volley,无疑是优秀的一款. 网络框架,无外乎解决一下几个问题,队列,缓存,图片异步加载,统一的网络请求和处理等. 一.Volley 队列 启 ...

  5. socket服务器开发中的SO_REUSEADDR选项与让人心烦的TIME_WAIT

    1 发现问题 我在开发一个socket服务器程序并反复调试的时候,发现了一个让人无比心烦的情况:每次kill掉该服务器进程并重新启动的时候,都会出现bind错误:error:98,Address al ...

  6. MaxMin搜索

  7. MongoDB学习笔记——聚合操作之聚合管道(Aggregation Pipeline)

    MongoDB聚合管道 使用聚合管道可以对集合中的文档进行变换和组合. 管道是由一个个功能节点组成的,这些节点用管道操作符来进行表示.聚合管道以一个集合中的所有文档作为开始,然后这些文档从一个操作节点 ...

  8. loadrunner常用函数

    1.关联函数:web_reg_save_param("session", "LB=value=", "RB=>", LAST);

  9. hdu 4856 Tunnels (记忆化搜索)

    Tunnels Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  10. cmd获取系统时间

    查看时间格式: echo %date% echo %time% 通过%date:~5,2%来组合得出当前日期,组合的效果为yyyymmdd,date命令得到的日期格式默认为yyyy-mm-dd,通过% ...