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中dictionary items()系列函数的用法实例
Aug 21 Python
python删除某个字符
Mar 19 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
python爬虫-模拟微博登录功能
Sep 12 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
python 密码学示例——凯撒密码的实现
Sep 21 Python
python openCV自制绘画板
Oct 27 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 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的header和asp中的redirect比较
2006/10/09 PHP
PHP 图像尺寸调整代码
2010/05/26 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
keras实现多种分类网络的方式
2020/06/11 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
J2EE中常用的名词进行解释
2015/11/09 面试题
终止劳动合同协议书
2014/04/14 职场文书
初中生评语大全
2014/04/24 职场文书
2015国庆节感想
2015/08/04 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
Python实现视频中添加音频工具详解
2021/12/06 Python
python manim实现排序算法动画示例
2022/08/14 Python