一般爬网页使用以下代码即可
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版权协议,转载请附上原文出处链接和本声明。