朱皮特的博客 自由的飞翔

Python抓取网页中文乱码

2017-03-01
朱皮特
阅读量:

最近在学习Python,练习用Python抓取网页内容并解析,在解析gb2312字符集网页时出现中文乱码:

UnicodeEncodeError: 'gbk' codec can't encode character u'\xbb' in position 0: illegal multibyte sequence

原因及解决方案:网页中的字符编码方式重新编码一次即可:

# 使用requests库封装一个简单的通过get方式获取网页源码的函数
def getsource(url):
    html = requests.get(url)
    s = html.text.encode(html.encoding)
    s = s.decode('gb2312', 'ignore')    #转换为unicode
    # print s
    return s

当然# coding: utf-8也是要加的。

参考:Python编码unicode Gbk Utf8字符集转换的正确姿势 - 大星哥的博客 | BIGSINGER Blog

需指定Accept

# 有时不能返回正确的编码导致的乱码文本,可以指定下headers中的:'Accept': 'text/html',
def post(url, data, headers = None):
    h = headers
    if h is None:
        h = {
            'Accept': 'text/html',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
            }
    r = requests.post(url, data = data, headers = h)
    return r.content.decode()

Comments

Content