如何解决python爬虫乱码问题

以爬取百度首页为例子

直接上代码

import requests
url="http://www.baidu.com"
html=requests.get(url).text
print(html)

输出结果乱码,可这是为什么呢?很明显是编码问题造成的
在这里插入图片描述
我们去百度看下网页源码,编码为utf-8
在这里插入图片描述

然而我们的编译器,采用的也是utf-8,都是utf-8为什么会乱码呢?这时候就想到了,直接输出百度首页的编码方式

import requests
import sys
//输出我们编译器所用的编码
print(sys.getdefaultencoding())
url="http://www.baidu.com"
html=requests.get(url)
//输出百度的编码
print(html.encoding)

输出结果如下
在这里插入图片描述
乖乖,竟然是ISO-8859-1,不是utf-8,可这个是为什么呢,可能是由于网页压缩问题,我也是瞎猜的,哈哈。
那么我们就来用谷歌浏览器查看下该网页是否被压缩
在这里插入图片描述
接下来我们就进行编码转化

import requests
url="http://www.baidu.com"
html=requests.get(url).text
#encode编码,将ISO-8859-1编码成unicode
html=html.encode("ISO-8859-1")
#decode解码,将unicode解码成utf-8
html=html.decode("utf-8")
print(html)

问题解决

当然还有一种简单的方法
encoding是从http中的header中的charset字段中提取的编码方式,若header 中没有charset字段则默认为ISO-8859-1编码模式,则无法解析中文,这是乱码的原因。
apparent_encoding会从网页的内容中分析网页编码的方式,所以apparent_encoding比encoding更加准确。当网页出现乱码时可以把apparent_encoding的编码格式赋值给encoding。

import requests
	url = "http://www.baidu.com"
	r = requests.get(url)
	# 修改为网页的编码方式
	r.encoding = r.apparent_encoding
	# 输出网页内容
	print(r.text)
  • 15
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值