php网页抓取乱码(什么是这是的编码?的方式解决乱码问题? )
优采云 发布时间: 2021-10-31 02:15php网页抓取乱码(什么是这是的编码?的方式解决乱码问题?
)
2、 如果上面的方法不行,页面还是乱码;或者在head标签下找不到charset属性;或者我们要采集很多网页,而且这些网页的编码方式都不一样,我们不可能在一个网页上一一查看head标签,所以可以通过以下方式用来解决乱码。
(1)python 的 chardet 库
可以使用以下方法解决乱码问题
result = chardet.detect(response.content)
print(result)
data = response.content.decode(chardet.detect(response.content)['encoding'])
{'confidence': 0.99, 'language': '', 'encoding': 'utf-8'}
从输出结果可以看出,这是一个“猜测”代码。猜测的方法是先采集各种代码的特征字符。根据特征人物的判断,“猜”的概率很高。
这种方法的效率非常低。如果采集的网页很大,你只能猜测其中一部分的源代码,即
result = chardet.detect(response.content[:1000])
(2)响应编码
也可以使用另一种方法,response自身的编码和apparent_encoding这两个变量。
Response.encoding 一般来自 response.headers 中 content-type 字段的 charset 值。其他情况我不太了解。
response.apparent_encoding 一般使用上面提到的python chardet 库。
所以可以使用下面的方式来解决乱码问题
data = response.content.decode(response.apparent_encoding)
3、 一般来说,以上两种方法都可以解决乱码问题。但如果以上两种方法都不能解决,则可能是网页压缩造成的。使用以下方法解决此问题。
检查你写的头信息是否收录 Accept-Encoding 字段。如果是,请删除此字段。乱码问题将得到解决。
headers = {
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/49.0.2623.221
Safari/537.36 SE 2.X MetaSr 1.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Connection': 'keep-alive',
}