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常见文件操作的函数示例代码
Nov 15 Python
Django卸载之后重新安装的方法
Mar 15 Python
python 列表降维的实例讲解
Jun 28 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
在Python中COM口的调用方法
Jul 03 Python
Python根据服务获取端口号的方法
Sep 25 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
Apr 14 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 Python
python中复数的共轭复数知识点总结
Dec 06 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 Python
Python中的pprint模块
Nov 27 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 APC的安装与使用详解
2013/06/13 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
Scrapy的简单使用教程
2017/10/24 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python实现图片九宫格分割
2021/03/07 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
python中xlutils库用法浅析
2020/12/29 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
会计毕业生自荐书
2014/06/12 职场文书
推广活动策划方案
2014/08/23 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
离婚财产处理协议书
2014/09/30 职场文书