python抓取网页,字符集转换

英文很差学起来挺困难的,其中小弟就遇到一个十分蛋疼的问题,百度了半天就没找到解决办法~囧~ html

摸索了半天本身解决了,记录下来与君共勉。 python

问题提出: 数据库

    有时候咱们采集网页,处理完毕后将字符串保存到文件或者写入数据库,这时候须要制定字符串的编码,若是采集网页的编码是gb2312,而咱们的数据库是utf-8的,这样不作任何处理直接插入数据库可能会乱码(没测试过,不知道数据库会不会自动转码),咱们须要手动将gb2312转换成utf-8。 函数

首先咱们知道,python里的字符默认是ascii码,英文固然没问题啦,碰到中文的时候立马给跪。 测试

不知道你还记不记得,python里打印中文汉字的时候须要在字符串前面加 u: 编码

print u"来搞基吗?"
这样子中文才能显示,这里面的u的做用就是将后面的字符串转换为unicode码,这样中文才能获得正确的显示。

这里与之相关的有一个unicode()函数,用法以下 url

str="来搞基"
str=unicode(str,"utf-8")
print str
与u的区别是,这里用unicode将str转换为unicode编码,须要正确指定第二个参数,这里的utf-8是我test.py脚本自身的文件字符集,默认的多是ansi。

unicode这是一个关键,下面继续 spa

咱们开始抓取百度首页,注意,游客访问百度首页,查看网页源代码,它的charset=gb2312。 code

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中 htm

搞清楚,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保存文件,或者写入数据库等操做,固然,编码你已经指定了,不是吗?

相关文章
相关标签/搜索