爬虫爬取数据出现乱码的解决方法
1.网站源代码中英文全部乱码
可能的解决方法:
1)可能是编码格式不同造成的 在调用get方法后,返回的对象中有两个属性值,分别为:
encoding、apparent_encoding,当二者不同时,可能出现乱码,解决办法是encoding的值优先于apparent_encoding,即令:encoding=apparent_encoding
2)可能是反爬策略调用get方法中的header参数设置问题,比如加入了反爬头部关键字:Accept-Encoding: gzip, deflate, br,则可能出现全局乱码,只需删除这一关键字即可。
具体原因可能是服务器端在响应请求数据时采用了相应的编码格式(比如:gzip、br)将数据进行压缩后再进行发送,然后浏览器端我们调用的requests方法时会自动帮助我们解压(gzip压缩的等)网页内容,如果这时候我们在params强行加入header头部参数模拟浏览器时,可能会导致解压数据时格式不正确,得到的数据出现乱码
2.出现类似b/x204/ds234/4353类似的乱码文件
可能是由于网站本身数据被压缩为gzip格式的文件,解决方式是在python中引入gzip库,并通过调用decompress(待解压对象).encode(‘utf-8’)将原始数据进行解压后再进行使用
3.只出现中文乱码
可能是编码格式不匹配导致
解决方法1:进入网站界面,查看html源代码,找到head头部中的charset属性,并将其值复制下来,eg:
然后再将该值赋值给r.encoding,即r为调用requests中的get 方法返回的对象,比如:r.encoding =‘gb2312’
解决方法2:直接令r.encoding = r.apparent_encoding
ps:
charset 查看网页中的源代码的编码格式
使用方法:引入import chardet
调用chardet.detect(html)
eg:`在这里插入代码片
from urllib import request
import chardet
import gzip
if __name__ == '__main__':
url = 'https://jobs.zhaopin.com/CC375882789J00033399409.html'
rsp = request.urlopen(url)
# 按住Ctrl键不送,同时点击urlopen,可以查看文档,有函数的具体参数和使用方法
html = rsp.read()
cs = chardet.detect(html)
print(html)
print("cs的类型:{0}".format(type(cs)))
print("监测到的cs数据:{0}".format(cs))
html = html.decode("utf-8")
# 意思是监测到就使用监测到的,监测不到就使用utf-8
print("HTML页面为:\n%s" % html)
`