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 相关文章推荐
Django卸载之后重新安装的方法
Mar 15 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
详解Python3的TFTP文件传输
Jun 26 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
Pandas中resample方法详解
Jul 02 Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
Python拼接字符串的7种方式详解
Mar 19 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
TensorFlow Autodiff自动微分详解
Jul 06 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使用数组实现队列
2012/02/05 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
Javascript的闭包详解
2014/12/26 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
基于python监控程序是否关闭
2020/01/14 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
体育专业个人求职信范文
2013/12/27 职场文书
学校安全教育制度
2014/01/31 职场文书
水毁工程实施方案
2014/04/01 职场文书
小学班级口号
2014/06/09 职场文书
国际金融专业自荐信
2014/07/05 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
新党章的学习心得体会
2014/11/07 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
nginx结合openssl实现https的方法
2021/07/25 Servers