目前还在python爬虫的学习中,遇到了对爬取的网页源码无法匹配其中的中文的问题,今天把解决方法给总结了一下:
response = urllib2.urlopen(request, context = context)
data = response.read()
在这里获取的网页源码如果直接用正则进行匹配是查找不到中文字符的,需要加上下面一句,将字符编码转换为unicode编码
data = unicode(data, "gb2312")
之后再进行中文字符的匹配就可以查找到指定的字符了
restr = ur"工作职责"
regex = re.compile(restr, re.IGNORECASE)
list = regex.findall(data)
print list[0]
结果就可以查找到“工作职责”这几个中文字符了。
关于为什么写了这个就可以了,原因如下:
首先先了解一下python中文的编码环境问题:
1.Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文。
2.所以py文件中要写中文字符时,一般在开头加 # -- coding: utf-8 -- 或者 #coding=utf-8。
这是指定一种编码格式,意味着用该编码存储中文字符(也可以是gbk、gb2312等)。
简单来说就是:编码意味着 unicode -> ch-str,解码意味着 ch-str -> unicode,
因此我们可以通过chardet查看爬取网页的源码编码格式是什么,接着再使用对应的编码将其unicode,然后才可以进行中文的正则匹配。
注意:1.由于我上面的网页源码是“gb2312”编码,因此我使用unicode(data,“gb2312”)
2 .关于python的chardet这个模块,功能主要是检测传入数据的编码格式,具体的细节可以自行查阅相关资料