怎么处理惩罚requests中的乱码题目

    添加时间:2013-5-7 点击量:

    长久专注于写爬虫,受够了urllib、urllib2甚至是urllib3。最后选择了更人道化的requests。可是requsests对中文的支撑并不太好,时常会呈现乱码题目。研究源码之后现给出解决规划。


    乱码的由来:requests的字符检测借用了一个名为chardet的第三方库,若是运行景象缺乏这个库的话体系会从此外处所想办法猜测字符集,比如header中的是声明。其实这个第三库和解救的办法往往都不靠谱,而在转换unicode的过程又是经由过程str办法强迫履行的。于是可恶的乱码就这么呈现了。


    解决规划1:直接应用requests中response对象的content属性,content是未被转换成unicode的返回值。如许一来怎么解码就是调用方可以本身灵活处理惩罚的题目了


    解决规划2:对requests库进行hack本身写一套合适的字符集检测办法。我本身就是在ultis.py中添加了一个本身的get_encoding办法,然后在models.py中调用了它。


    get_encoding 办法实现如下,这个实现未必很完美但至少解决了题目



    def get_encoding(s):
    
    if isinstance(s,unicode):
    return unicode
    try:
    r
    = unicode(s)
    return ASCII
    except:
    try:
    r
    = s.decode(utf8
    return utf8
    except:
    try:
    r
    = s.decode(gbk
    return gbk
    except:
    try:
    r
    = s.decode(latin-1
    return latin-1
    except:
    pass



    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: