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实现二分法算法实例
Feb 02 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
详谈Python高阶函数与函数装饰器(推荐)
Sep 30 Python
python如何修改装饰器中参数
Mar 20 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
python实现简单成绩录入系统
Sep 19 Python
PYcharm 激活方法(推荐)
Mar 23 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
简单了解Django项目应用创建过程
Jul 06 Python
python正则表达式 匹配反斜杠的操作方法
Aug 07 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 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/05/04 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
php生成word并下载代码实例
2019/03/15 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
Python实现简单遗传算法(SGA)
2018/01/29 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
Java模拟试题
2014/11/10 面试题
2014年创卫实施方案
2014/02/18 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
干部作风建设工作总结
2014/10/29 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
工作收入证明模板
2015/06/12 职场文书
法制主题班会教案
2015/08/13 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
Python实现随机生成迷宫并自动寻路
2021/06/13 Python