爬虫&编码

写爬虫,尤其时抓取中文页面,总是不可避免的要和不同的编码打交道。
最常用的UTF-8,GBK,如果抓取时返回的是二进制数据,解码的encoding设置不对很可能引起乱码。

技巧一:

我写爬虫常用requests库,可以这样设置

import requests
r = requests.get('http://xxx')
# r.encoding = 'utf-8' 此设置可选
return r.text

r.text会自动猜测文件编码,返回str格式的内容,但好像经常猜不准,所以还是乱码,很蛋疼。
所以事先如果知道文件的编码,可以设置r.encoding,告诉他怎么解码。

技巧二:

import requests
r = requests.get('http://xxx')
# 昨天发现的奇技淫巧
html_encoding = requests.utils.get_encodings_from_content(r.text)[0]
return r.content, html_encoding

r.content返回的是二进制的数据,需要显示中文时再r.content.decode(html_encoding)就可以得到正常的中文了。因为requests.utils.get_encodings_from_content(r.text)[0]根据网页正文判断编码,很准,相反,r.encoding只根据文件头部判断,如果一些网页写的不规范,就给你返回ISO-8859

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容