php网页抓取乱码(python2抓取网页的问题编码的网站)
优采云 发布时间: 2021-12-22 18:09php网页抓取乱码(python2抓取网页的问题编码的网站)
使用python2抓取网页时,经常会遇到抓取的内容显示为乱码的情况。
html
这种情况最可能出现的就是编码问题:运行环境的字符编码与网页的字符编码不一致。Python
例如,我在 windows 控制台 (gbk) 中抓取了一个 utf-8 编码的 网站。或者,在Mac/Linux终端抓一个gbk编码的网站(utf-8)。由于大多数网站使用utf-8编码,所以很多人使用windows,这种情况极其严重普通.网络
如果你发现你抓取的内容在英文、数字、符号上看起来都是正确的,但是中间出现了一些乱码,那么你基本可以确定是这种情况。编程
解决这个问题的方法是先按照网页的编码方式将结果解码成unicode,然后输出。如果不确定网页的编码方式,可以参考以下代码:windows
导入 urllib 浏览器
req = urllib.urlopen("")app
信息 = ()ide
charset = info.getparam('charset')网站
content = req.read()ui
打印 content.decode(charset,'ignore')
'ignore' 参数的作用是忽略无法解码的字符。
但这种方法并不总是有效。另一种方式是通过正则化直接匹配网页代码中的编码设置:
除了编码问题导致的乱码外,还有一种情况经常被忽略,那就是目标页面开启了gzip压缩。压缩后的网页传输的数据更少,打开速度更快。在浏览器中打开时,浏览器会根据网页的header信息自动解压。但是直接用代码去抢就不行了。所以很可能会疑惑,为什么打开网页地址很清楚,但是程序爬取却不行。就连我自己也被这个问题愚弄了。
这种情况的表现就是几乎所有爬取的内容都是乱码,甚至无法显示。
判断网页是否开启压缩并解压,可以参考如下代码:
导入 urllib
导入 gzip
从 StringIO 导入 StringIO
req = urllib.urlopen("")
信息 = ()
encoding = info.getheader('Content-Encoding')
内容 = req.read()
如果编码 =='gzip':
buf = StringIO(内容)
gf = gzip.GzipFile(fileobj=buf)
内容 = gf.read()
印刷内容
在我们课堂上查看天气的系列编程示例中,这两个问题困扰了很多人。这里有一个特别的解释。
最后,还有另一个“武器”要介绍。如果你从一开始就使用它,你甚至不知道上面提到的两个问题仍然存在。
这是请求模块。
要以相同的方式获取网页,您只需要:
*敏*感*词*请求
打印 requests.get("").text
没有编码问题,没有压缩问题。
这就是我喜欢 Python 的原因。
至于如何安装requests模块,请参考前面的文章: