Python+Requests抓取中文乱码改进方案

前两天更新了下网址缩短这个项目的requests版本后抓取要缩短的网址title时候乱码的比例大幅上升。但有不想靠降级版本来解决。

之前最早开始用Requests做抓取内容工具时候也碰到过一些中文乱码的情况,最后搜索到的Python中文乱码的最常见的解决方案就是重置页面编码

import sysreload(sys)sys.setdefaultencoding('utf-8')

同样的,俺做网址缩短项目时候抓取要缩短网址的Title时候也是采用这样的方式。

但是升级了Requests版本之后出现了大量的GBK编码url的Title无法正常识别的情况。在本地也升级了最新的Requests版本后写了一个函数做了一些测试,发现重置页面默认编码之后虽然抓取到了某些GBK编码的页面内容,抓取后的结果也是unicode格式,但是转换成正常gbk时候出现各种莫名其妙错误。

这时候使用r.encoding输出抓取的页面编码总是iso-8859-1,而不是gbk或者gb2312……各种调试后写了一个简单函数,虽然依然很多中文依然乱码,但相比之前的比例有了很大的提升了……

f = requests.get(url, timeout = 3, allow_redirects = True)content = f.contentif f.encoding.lower() != 'utf-8':    charset = re.compile(r'content="text/html;.?charset=(.*?)"').findall(content)    print charset, f.encoding.lower(), f.headers['content-type']    try:        if len(charset)>0 and charset[0].lower()!=f.encoding.lower():            content = content.decode('gbk').encode('utf-8')    except:        passdoc=libxml2dom.parseString(content, html=1)title_name=doc.xpath('//title')[0].textContent.encode('utf-8')
Python+Requests抓取中文乱码改进方案

相关文章:

你感兴趣的文章:

标签云: