抓取动态网页( 的编码(u)需要制定字符串的字符串编码)

优采云 发布时间: 2021-10-24 22:10

  抓取动态网页(

的编码(u)需要制定字符串的字符串编码)

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

  来源:未知 浏览 38 次时间 2021-06-11 00:12

  有时我们采集在处理网页后将字符串保存到文件或写入数据库。这时候就需要制定字符串的编码方式了。 采集网页的编码是gb2312,我们的数据库是utf-8。如果不做任何处理直接插入数据库可能会出现乱码(我没测试过,不知道数据库会不会自动转码)我们需要手动把gb2312转成utf-8。

  首先我们知道python中的字符默认是ascii码。英文当然没问题。遇到中国人,立马下跪。

  

  打印你“你想建立一个基地吗?”

  这样就可以显示中文了。 u 的作用是将下面的字符串转换成unicode 码,以便正确显示中文。

  这里有一个与之相关的 unicode() 函数。用法如下

  str="Let's make a base"str=unicode(str,"utf-8")print str

  两者的区别

  和 u 是必须正确指定第二个参数才能使用 unicode 将 str 转换为 unicode。 utf-8 是我的 test.py 脚本本身的文件字符集。默认字符集可能是ansi。

  unicode 这是下面继续的关键

  

  import urllib2def main(): f=urllib2.urlopen("") 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:使用str.encode("specified character set")将unicode字符串str转换成你指定的字符集

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线