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 web框架学习笔记
May 03 Python
深入浅析python定时杀进程
Jun 06 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
VSCode下好用的Python插件及配置
Apr 06 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
Python实现对adb命令封装
Mar 06 Python
Django基于客户端下载文件实现方法
Apr 21 Python
基于python纯函数实现井字棋游戏
May 27 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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用GD库生成高质量的缩略图片
2011/03/09 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
极简的Python入门指引
2015/04/01 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
学生违反校规检讨书
2014/10/28 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
导游欢送词
2015/01/31 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
Python中npy和mat文件的保存与读取
2022/04/24 Python
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL