抓取动态网页( 的编码(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转换成你指定的字符集