zoukankan      html  css  js  c++  java
  • 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 的超集

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

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

  • 相关阅读:
    ajax学习笔记
    CSS3伪类
    《HTML5与CSS3基础教程》学习笔记 ——Four Day
    《HTML5与CSS3基础教程》学习笔记 ——Three Day
    《HTML5与CSS3基础教程》学习笔记 ——Two Day
    《HTML5与CSS3基础教程》学习笔记 ——One Day
    js面向对象笔记
    《锋利的jQuery》心得笔记--Four Sections
    《锋利的jQuery》心得笔记--Three Sections
    《锋利的jQuery》心得笔记--Two Sections
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5781389.html
Copyright © 2011-2022 走看看