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中的tkinter模块作图的方法
Feb 07 Python
pandas中去除指定字符的实例
May 18 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
django+mysql的使用示例
Nov 23 Python
python3.6数独问题的解决
Jan 21 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
Django使用Profile扩展User模块方式
May 14 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
python实现视频压缩功能
Dec 18 Python
Python字典和列表性能之间的比较
Jun 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函数代码
2013/08/29 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
django修改models重建数据库的操作
2020/03/31 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
理财学专业自荐书
2014/06/28 职场文书
新农村建设汇报材料
2014/08/15 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
中学教师读书笔记
2015/07/01 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
初中英语教学随笔
2015/08/15 职场文书
pyqt5打包成exe可执行文件的方法
2021/05/14 Python