今天尝试了下爬虫,爬取一本小说,忘语的凡人修仙仙界篇,当然这样不好,大家要支持正版。

  爬取过程中是老套路,先获取网页源代码  

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests if __name__ =='__main__':
url='http://www.biquge.com.tw/18_18998/8750558.html'
page_req=requests.get(url)
html=page_req.text
bf=BeautifulSoup( html)
texts = bf.find_all('div',id='content')
print(texts[0].text.replace('\xa0'*8,'\n\n'))

  结果:乱码

  在浏览器看下代码,是gbk编码,需要进行转码,这方面不清楚,查了下资料。
  PS:爬取的所有网页无论何种编码格式,都转化为utf-8格式进行存储,与源代码编码格式不同所以出现乱码

  UTF-8通用性比较好,是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。

  UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示,也就是必须两者都是utf-8才行。

  gbk是是国家编码,通用性比UTF8差,GB2312之类的都算是gbk编码。

  GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。

  unicode是一种二进制编码,所有utf-8和gbk编码都得通过unicode编码进行转译,即utf-8和gbk编码之间不能直接转换。附图如下:

  python中编码转换用到了两个函数decode()和encode()
  比如:html=page_req.text.encode('iso-8859-1').decode('utf-8')
  encode('iso-8859-1') 是将gbk编码编码成unicode编码
  decode(‘gbk’) 是从unicode编码解码成gbk字符串

  由于pycharm只能显示来自unicode的汉字,代码修改如下:

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests if __name__ =='__main__':
url='http://www.biquge.com.tw/18_18998/8750558.html'
page_req=requests.get(url)
html=page_req.text.encode('iso-8859-1')
bf=BeautifulSoup( html)
texts = bf.find_all('div',id='content')
print(texts[0].text.replace('\xa0'*8,'\n\n'))

解决:

附:

GBK

简单而言,GBK是对GB2312的进一步扩展(K是汉语拼音kuo zhan(扩展)中“扩”字的声母),
收录了21886个汉字和符号,完全兼容GB2312。

GB18030

GB18030收录了70244个汉字和字符,更加全面,与 GB 2312-1980 和 GBK 兼容。
GB18030支持少数民族的汉字,也包含了繁体汉字和日韩汉字。
其编码是单、双、四字节变长编码的。

GB2312

当国人得到计算机后,那就要对汉字进行编码。在ASCII码表的基础上,小于127的字符意义与原来相同;而将两个大于127的字节连在一起,来表示汉字,前一个字节从0xA1(161)到0xF7(247)共87个字节,称为高字节,后一个字节从0xA1(161)到0xFE(254)共94个字节,称为低字节,两者可组合出约8000种组合,用来表示6763个简体汉字、数学符号、罗马字母、日文字等。
在重新编码的数字、标点、字母是两字节长的编码,这些称为“全角”字符;而原来在ASCII码表的127以下的称为“半角”字符。
简单而言,GB2312就是在ASCII基础上的简体汉字扩展。

UTF(UCS Transfer Format)

UTF是在互联网上使用最广的一种Unicode的实现方式。我们最常用的是UTF-8,表示每次8个位传输数据,除此之外还有UTF-16。
UTF-8长这样,“你好中国!hello,123”:

你好中国!hello,123

Unicode

准确来说,Unicode不是编码格式,而是字符集。这个字符集包含了世界上目前所有的符号。
另外,在原来有些字符可以用一个字节即8位来表示的,在Unicode将所有字符的长度全部统一为16位,因此字符是定长的。
Unicode是长这样的:

\u4f60\u597d\u4e2d\u56fd\uff01\u0068\u0065\u006c\u006c\u006f\uff0c\u0031\u0032\u0033
  • 1

上面这段Unicode的意思是“你好中国!hello,123”。

 

python爬虫解决gbk乱码问题的更多相关文章

  1. 22-python爬虫解决gbk乱码问题

    转载自: python爬虫解决gbk乱码问题   今天尝试了下爬虫,爬取一本小说,忘语的凡人修仙仙界篇,当然这样不好,大家要支持正版. 爬取过程中是老套路,先获取网页源代码 # -*- coding: ...

  2. 在visual studio code 中配置python以及解决中文乱码问题

    安装好 visual stuido code (下面简称 “ VSC ”)后,要想使用它运行调试 python 代码还需要做一些工作以解决下列问题: 搭建 python 环境 print 打印中文出现 ...

  3. Python中解决中文乱码问题

    乱码原因:因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件.但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了. ...

  4. 37.Intellij IDEA解决GBK乱码

    转自:https://blog.csdn.net/myspacedemen/article/details/38401047 今天尝鲜装完Intellij IDEA以后,打开一个GBK编码的页面,华丽 ...

  5. python爬虫解决百度贴吧登陆验证码问题

    作为贴吧重度用户,写了个贴吧爬虫脚本 抄了一些别人的代码.记得有个验证码解决的.可是忘了链接了,今天最终自己攻克了. 首先要让登陆须要验证码,不停地登陆就好了...度娘非常快会加上验证码大法的... ...

  6. python爬虫解决编码问题

    参考 https://blog.csdn.net/qq_38008452/article/details/80423436 问题 解决方法 加上encoding='utf-8'

  7. Python 爬虫 解决escape问题

    爬取某个国外的网址,遇到的编码问题 ,在前段页面 返回的数据是 亞洲私人珍藏賣,令仝好分享他為此 所傾注的心血與熱愛。 爬虫源码是: url = 'http://www.bonhams.com/auc ...

  8. python flask 解决中文乱码

    response = make_response(output_string)response.headers['Content-Type'] = 'text/plain;charset=UTF-8' ...

  9. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

随机推荐

  1. windows下安装MongoDB进度条不动

    windows 下安装MongoDB, 在 Installing MongoDB Compass...(this may take a few minutes) 一步,会停留很长时间,点击取消可能也会 ...

  2. 初识lucene(想看代码的跳过)

    最早是在百度贴吧里看到的lucene这个名称,只知道跟搜索引擎有关,因为工作中一直以来没有类似的需求,所以没有花时间学习这方面的知识. 刚过完年,公司不忙,自己闲不住把<Netty权威指南> ...

  3. 零基础6个月学好java月薪1w+看看他是怎么学好java的

    21世纪进入信息时代,信息科技给人类的生产和生活方式带来了深刻的变革,信息产业已成为推动国家经济发展的主导产业之一,Java作为含金量极高的一门IT技术,很多人希望从事这个行业,那么想学好Java,要 ...

  4. CSS3动画--过渡效果

    CSS3动画--过渡效果 transition                               设置四个过渡属性 transition-property          过渡的名称 tr ...

  5. jquery 实现拖动文件上传加进度条

    通过对文件的拖动实现文件的上传,主要用到的是HTML5的ondrop事件,上传内容通道FormData传输: //进度条 <div class="parent-dlg" &g ...

  6. iOS开发--XMPPFramework--用户登录(三)

    创了一个XMPP即时通讯交流群140147825,欢迎大家来交流~我们是一起写代码的弟兄~ 我们在第一篇文章中,已经介绍了Openfire服务器的搭建等环境的配置, 第二篇文章中,导入了XMPPFra ...

  7. ------ Tor(洋葱路由器)匿名网络源码分析——主程序入口点(一)------

    --------------------------------------------------------<概览> tor 的源码包可以从官网下载,可能需要预先利用其它FQ软件才能访 ...

  8. Redis之Zset

    一.Redis之Zset简介 1. 有序集合Zset是String类型的有序集合. 2. Zset中每个元素都会关联一个double类型的分数值,redis通过分数值来为集合中所有成员进行从小到大排序 ...

  9. tp5 提升性能的几个方法

    原文:http://www.upwqy.com/details/27.html 首先说明 如果是linux 或者是Mac,需要给予权限才能操作 以下方法建议,在网站稳定后再生成上传. 1 生成路由缓存 ...

  10. lambda表达式Expression<Func<Person, bool>> 、Func<Person, bool>区别

    前言: 自己通过lambda表达式的封装,将对应的表达式转成字符串的过程中,对lambda表达式有了新的认识 原因: 很多开发者对lambda表达式Expression<Func<Pers ...