php抓取网页源码(python爬取网页乱码问题的解决方法及解决办法(一))
优采云 发布时间: 2022-01-20 20:04php抓取网页源码(python爬取网页乱码问题的解决方法及解决办法(一))
使用python爬取网页时,经常会遇到乱码。一旦遇到乱码,就很难得到有用的信息。遇到乱码问题,一般有以下几种方式:
1、查看网页源码中的head标签,找到编码方式,例如:
上图中可以看到charset=\'utf-8\',说明这个网页最有可能是用'UTF-8'编码的(很有可能,但不是100%),可以试试这个编码方法 :
结果 = response.content.decode(\'utf-8\')
这样得到的内容基本没有乱码
2、如果上面的方法不行,页面还是乱码;或者在head标签下找不到charset属性;或者我们要采集很多网页信息,而这些网页的编码方式不一样,我们不可能一一查看head标签,所以可以使用下面的方法解决乱码问题。
2.1 Python 的 chardet 库
可以使用以下方法解决乱码问题
结果 = chardet.detect(response.content)
打印(结果)
数据 = response.content.decode(chardet.detect(response.content)[\'encoding\'])
{\'置信度\':0.99,\'语言\':\'\',\'编码\':\'utf-8\'}
从输出结果可以看出,这是一种“猜测”编码。猜测的方法是先采集各种编码的特征字符,根据这些特征字符,“猜对”的概率很大。
这种方法的效率非常低。如果采集的网页很大,你只能猜测其中一段的源码,即
结果 = chardet.detect(response.content[:1000])
2.2 响应编码
也可以使用另一种方法,即response自身的encoding和parent_encoding这两个变量。
response.encoding一般来自response.headers中content-type字段中charset的值,其他情况我不太了解。
response.apparent_encoding 一般采用上述python chardet库的方法。
因此,乱码问题可以通过以下方式解决
数据 = response.content.decode(response.apparent_encoding)
3、总的来说,以上两种方法可以解决乱码问题。但是,如果以上两种方法都不能解决,则可能是网页压缩造成的。这个问题通过以下方式解决。
检查你写的头信息是否收录Accept-Encoding字段。如果是,请删除该字段,乱码问题将得到解决。
标题 = {
\'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, 像 Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0\',
\'接受\': \'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\',
\'连接\':\'保持活动\',
}
4、很遗憾,如果以上方法都没有帮助到您,那么您可能遇到了加密问题。到目前为止,我还没有遇到过上述方法无法解决的乱码网页。如果遇到或者解决不了,可以回复我,我会尽力帮你解决的。
———————————————
原文链接: