php网页抓取乱码(什么是这是的编码?的方式解决乱码问题? )
优采云 发布时间: 2022-02-20 07:13php网页抓取乱码(什么是这是的编码?的方式解决乱码问题?
)
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)响应编码
您还可以使用另一种方法,即响应自己的 encoding 和 visible_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',
}