php网页抓取乱码(有关的乱码问题有哪些方式解决?(图))

优采云 发布时间: 2021-10-16 14:07

  php网页抓取乱码(有关的乱码问题有哪些方式解决?(图))

  本文文章将详细讲解python爬取乱码网页的解决方法。小编觉得很实用,分享给大家作为参考。我希望每个人都可以阅读这篇文章。得到一些东西。

  在使用python爬取网页时,经常会遇到乱码。一旦遇到乱码,就很难得到有用的信息。遇到乱码,我通常有以下几种方法:

  1、查看网页源码中的head标签,找到编码方式,例如:

  上图中可以看到charset='utf-8',说明这个网页很有可能使用的是'UTF-8'编码(很有可能,但不是100%),可以试试这个编码方法:

  result = response.content.decode('utf-8')

  这样得到的内容基本没有乱码。

  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',

}

  python抓取网页乱码的解决方法分享到这里。希望以上内容对您有所帮助,让您了解更多。如果你觉得文章不错,可以分享给更多人看。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线