python抓取网页时字符集转换问题处理方案分享


Posted in Python onJune 19, 2014

问题提出:

    有时候我们采集网页,处理完毕后将字符串保存到文件或者写入数据库,这时候需要制定字符串的编码,如果采集网页的编码是gb2312,而我们的数据库是utf-8的,这样不做任何处理直接插入数据库可能会乱码(没测试过,不知道数据库会不会自动转码),我们需要手动将gb2312转换成utf-8。

首先我们知道,python里的字符默认是ascii码,英文当然没问题啦,碰到中文的时候立马给跪。

不知道你还记不记得,python里打印中文汉字的时候需要在字符串前面加 u:

print u"来搞基吗?"

这样子中文才能显示,这里面的u的作用就是将后面的字符串转换为unicode码,这样中文才能得到正确的显示。
这里与之相关的有一个unicode()函数,用法如下

str="来搞基"
str=unicode(str,"utf-8")
print str

与u的区别是,这里用unicode将str转换为unicode编码,需要正确指定第二个参数,这里的utf-8是我test.py脚本自身的文件字符集,默认的可能是ansi。
unicode这是一个关键,下面继续

我们开始抓取百度首页,注意,游客访问百度首页,查看网页源代码,它的charset=gb2312。

import urllib2
def main():
  f=urllib2.urlopen("http://www.baidu.com")
  str=f.read()
  str=unicode(str,"gb2312")
  fp=open("baidu.html","w")
  fp.write(str.encode("utf-8"))
  fp.close()

if __name__ == '__main__' :
  main()

解释:
我们首先用urllib2.urlopen()方法将百度首页抓取到,f是句柄 ,用str=f.read()将所有源代码读入str中

搞清楚,str里面就是我们抓取的html源代码,由于网页默认的字符集是gb2312,所以如果我们直接保存到文件中,文件编码将是ansi。

对于大部分人来说,其实这就足够了,但是有时候我就想把gb2312转换成utf-8的该怎么办呢?

首先:
    str=unicode(str,"gb2312") #这里的gb2312就是str的实际字符集,我们现在将其转换成unicode

然后:
    str=str.encode("utf-8") #将unicode的字符串重新编码成utf-8

最后:

    将str写入到文件中,打开文件看一下编码属性,发现是utf-8的了,把<meta charset="gb2312"改成<meta charset="utf-8" ,就是一个utf-8的网页了。做了这么多其实就完成了一个gb2312->utf-8的转码。

总结:

    我们回顾一下,如果需要将字符串按照指定的字符集保存,有以下几个步骤:

    1:用unicode(str,"原来的编码")将str解码成unicode字符串

    2:将unicode字符串str 使用 str.encode("指定的字符集") 转换成你指定的字符集

    3:将str保存文件,或者写入数据库等操作,当然,编码你已经指定了,不是吗?

Python 相关文章推荐
Python命名空间详解
Aug 18 Python
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
python实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
python支付宝支付示例详解
Aug 22 Python
Python操作Sonqube API获取检测结果并打印过程解析
Nov 27 Python
python如何使用Redis构建分布式锁
Jan 16 Python
Python sep参数使用方法详解
Feb 12 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
python在linux中输出带颜色的文字的方法
Jun 19 #Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 #Python
win7 下搭建sublime的python开发环境的配置方法
Jun 18 #Python
Python写的贪吃蛇游戏例子
Jun 16 #Python
Python中的yield浅析
Jun 16 #Python
python中使用enumerate函数遍历元素实例
Jun 16 #Python
Python中字典(dict)和列表(list)的排序方法实例
Jun 16 #Python
You might like
php读取文件内容的几种方法详解
2013/06/26 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
javascript 写类方式之八
2009/07/05 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
Django基础之Model操作步骤(介绍)
2017/05/27 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
python实现LRU热点缓存及原理
2019/10/29 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
python制作抽奖程序代码详解
2021/01/15 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
个人自我评价范文
2014/02/05 职场文书
中秋晚会策划方案
2014/06/12 职场文书
红色影片观后感
2015/06/18 职场文书
提档介绍信范文
2015/10/22 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js