网页抓取解密( 英文不好学起来挺困难的,百度了半天就没找到解决办法)

优采云 发布时间: 2022-02-25 05:01

  网页抓取解密(

英文不好学起来挺困难的,百度了半天就没找到解决办法)

  分享python抓取网页时字符集转换问题的解决方案

  更新时间:2014-06-19 09:45:07 提交人:hebedich

  在学习python的过程中,发现学好英语是非常困难的。其中,小弟遇到了一个非常痛苦的问题。百度了半天也没找到解决办法~囧~摸索了半天自己解决了,和大家一起记录一下。互相鼓励。

  问题:

  有时我们在采集网页中,将字符串保存到文件或处理后写入数据库。这时候,我们需要制定字符串的编码方式。如果采集网页的编码是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是key,下面继续

  我们开始爬取百度首页。注意,访问者访问百度主页查看网页源代码时,其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,转码为utf-8。

  总结:

  我们回顾一下,如果需要按照指定的字符集保存字符串,有以下步骤:

  1:使用unicode(str, "original encoding")将str解码成unicode字符串

  2:将unicode字符串str转换成你使用str.encode("specified character set")指定的字符集

  3:将str保存到文件,或者写入数据库等。当然,你已经指定了编码,对吧?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线