python出现乱码怎么解决,python爬虫乱码怎么解决
使用python抓取网页时,经常会遇到乱码。一旦我们遇到乱码,就很难得到有用的信息。我遇到乱码问题,一般有以下几种情况:
1.查看网页源代码中的head标签,找到编码方法,比如:
在上图中,你可以看到charset=utf-8 ,这说明这个网页很可能是用 utf-8 编码的(很有可能,但不是100%),所以你可以试试这种编码方式:
result=response . content . decode( UTF-8 )。这样得到的内容基本不会出现乱码。
相关:《Python教程》
2.如果以上方法都没有效果,页面还是乱码;或者在head标记下找不到charset属性;或者说我们要收集很多网页的信息,而这些网页的编码方式又不尽相同,我们不可能一一核对head标签。然后我们可以用下面的方法解决乱码。
(1)python的chardet库
您可以通过以下方式解决乱码问题。
result=chardet . detect(response . content)
打印(结果)
data=response . content . decode(chardet . detect(response . content)[ encoding ])
{ 置信度 33600.99,语言 3360 ,编码 3360 UTF-8}从输出结果可以看出,这是一个“猜测”代码。猜的方式是先收集各种编码的特征字符,通过特征字符判断,有很大概率“猜对”。
这种方法的效率很低。如果收集的网页很大,只能猜测一段的源代码,也就是
result=chardet . detect(response . content[:1000])(2)response的编码
也可以用另外一种方法,就是response自己的编码encoding,apparent_encoding变量。
一般来说,response.encoding是来自于response.headers的content-type字段中charset的值,其他情况我不太了解。
前面提到的python的chardet库一般采用response.apparent_encoding方法。
因此,乱码问题可以通过以下方式解决。
data=response . content . decode(response . apparent _ encoding)3。一般以上两种方法都可以解决乱码问题。但如果以上两种方法都解决不了,可能是网页压缩造成的。这类问题的解决方法如下。
检查你写的头信息是否包含Accept-Encoding字段。如果是这样,请删除此字段,乱码问题将得到解决。
标题={
接受编码 :gzip,deflate,sdch ,
接受-语言 :zh-CN,zh;q=0.8 ,
用户代理“:”Mozilla/5.0(windows nt 10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/49.0.2623.221
Safari/537.36SE2.XMetaSr1.0 ,
接受“:”text/html、application/xhtml xml、application/XML;q=0.9,image/webp,*/*;q=0.8 ,
连接 : 保持活动,
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。