python爬网页html乱码问题

一般爬网页使用以下代码即可

def getHtml(url):
    if url.startswith('//'):
        url = 'https:' + url
    page = urllib.request.urlopen(url)
    charset = page.info().get_param('charset')
    if not charset:
        charset = 'UTF-8'
    html = page.read()
    return html.decode(charset, errors="replace")

但今天爬取一个网页,返回头表明的charset=utf-8,用开发者模式看网页html,里面表明charset=gb2312

然后在前端显示正常,开发者模式下看HTML代码。中文均为乱码。

使用python模拟请求,打印出来的html文本全是乱码(一般都是英文正常,中文乱码,可这次全部都是乱码,根本看不出来是一个HTML文本)。

使用断点,read方法取出来的数据是byte,想通过编码转换看下能否转换成正常文本,但都不行。

最后使用了以下方法就正常了

def getHtml(url):
    if url.startswith('//'):
        url = 'https:' + url
    req = urllib.request.Request(url=url, headers=headers, method='GET')
    response = urllib.request.urlopen(req)
    buff = BytesIO(response.read())
    f = gzip.GzipFile(fileobj=buff)
    charset = response.info().get_param('charset')
    if not charset:
        charset = 'UTF-8'
    return f.read().decode(charset).replace(r'\n', '')


版权声明:本文为lcsjdn原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。