14 Python进行数据乱码处理

编码问题

我们在爬取网页时,结果会出现乱码,这是因为编码不一致的原因导致的。

import requests
url = 'https://www.baidu.com'
res = requests.get(url).text
print(res)

运行结果为:
在这里插入图片描述

编码分析

为了爬取到正确的网页,我们要进行分析编码是否一致。

import requests
url = 'https://www.baidu.com'
code = requests.get(url).encoding
print(code)

输出结果为:

ISO-8859-1

我们可以看倒网页源代码的编码方式为ISO-8859-1。
那我们通过之前讲解的通过开发者工具可以查看网页的编码方式:
在这里插入图片描述
其中的< meta >中charset的参数设置就是该网页的编码方式,可以发现是utf-8(utf-8支持中文编码,而ISO-8859-1属于单字节编码,应用于英文系列)那么就需要我们进行重新编码。

重新编码和解码

import requests
url = 'https://www.baidu.com'
res = requests.get(url).text
res = res.encode('ISO-8859-1').decode('utf-8')

先通过encode()函数进行编码,将获取的ISO-8859-1的内容转换为二进制字符,然后通过decode()函数进行解码,变成了对应网页的utf-8编码方式。
输出结果:
在这里插入图片描述

encode()与decode()

encode()就是将字符转换为二进制如:

res = '百度'
res = res.encode('utf-8')
print(res)

输出:

b’\xe7\x99\xbe\xe5\xba\xa6’

decode()就是将二进制转化为对应字符:

a = b'\xe7\x99\xbe\xe5\xba\xa6'
a = a.decode('utf-8')
print(a)

输出:

百度

解决乱码问题的经验

我们除了常见的utf-8外,中文网页还有gbk编码方式很常见。
我们在进行解决问题时可以分为以下三个步骤:
第一:
对于大多数网页我们可以先进行常规爬取看是否有乱码:

res = requests.get(url).text

第二:
若无乱码可直接用,若有则先进行一次转换。

res = requests.get(url).text
res = res.encode('ISO-8859-1').decode('utf-8')

第三:
若还不行或者报错可以换一种。

res = requests.get(url).text
res = res.encode('ISO-8859-1').decode('gbk')

我们还可以通过try/except进行整合:

res = requests.get(url).text
try:
    res = res.encode('ISO-8859-1').decode('utf-8')
except:
    try:
        res = res.encode('ISO-8859-1').decode('gbk')
    except:
        res = res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啥都鼓捣的小yao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值