抓取网页数据 php(有一定的参考价值,有需要的朋友可以参考一下吗)

优采云 发布时间: 2021-10-10 08:31

  抓取网页数据 php(有一定的参考价值,有需要的朋友可以参考一下吗)

  本文内容文章是关于Python爬取乱码网页的原因及解决方法。有一定的参考价值。有需要的朋友可以参考。我希望它会对你有所帮助。

  在使用python2抓取网页时,我们经常会遇到抓取到的内容出现乱码。

  出现这种情况最有可能是编码问题:运行环境的字符编码与网页的字符编码不一致。

  例如,我在 windows 控制台 (gbk) 中抓取了一个 utf-8 编码的 网站。或者,在Mac/Linux终端中抓一个gbk编码的网站(utf-8)。因为大多数网站使用的是utf-8编码,而且很多人用的是Windows,所有这种情况相当普遍。

  如果你发现你抓取的内容在英文、数字、符号上看起来都是正确的,但是中间出现了一些乱码,你基本可以断定是这样的。

  

  解决这个问题的办法是先按照网页的编码方式将结果解码成unicode,然后输出。如果不确定网页的编码,可以参考以下代码:

  import urllib

req = urllib.urlopen("http://some.web.site")

info = req.info()

charset = info.getparam('charset')

content = req.read()

print content.decode(charset, 'ignore')

  'ignore' 参数的作用是忽略无法解码的字符。

  然而,这种方法并不总是有效。另一种方式是通过正则化直接匹配网页代码中的编码设置:

  除了编码问题导致的乱码外,还有一种情况经常被忽略,那就是登陆页面开启了gzip压缩。压缩后的网页传输的数据更少,打开速度更快。在浏览器中打开时,浏览器会根据网页的header信息自动解压。但是直接用代码去抢就不行了。所以,很可能会疑惑,为什么打开网页地址明了,但是程序爬取却不行。就连我自己也被这个问题愚弄了。

  这种情况的表现就是抓取的内容几乎都是乱码,甚至无法显示。

  判断网页是否开启压缩并解压,可以参考如下代码:

  import urllib

import gzip

from StringIO import StringIO

req = urllib.urlopen("http://some.web.site")

info = req.info()

encoding = info.getheader('Content-Encoding')

content = req.read()

if encoding == 'gzip':

buf = StringIO(content)

gf = gzip.GzipFile(fileobj=buf)

content = gf.read()

print content

  在我们课堂上查看天气系列的编程实例(点击查看),这两个问题困扰了不少人。这里有一个特别的解释。

  最后,还有另一种“武器”要介绍。如果你第一次使用它,你甚至不知道上面两个问题仍然存在。

  这是请求模块。

  以同样的方式抓取网页,您只需要:

  import requests

print requests.get("http://some.web.site").text

  没有编码问题,没有压缩问题。

  这就是我喜欢 Python 的原因。

  至于如何安装requests模块,请参考前面的文章:

  Python-Crossin的编程课堂如何安装第三方模块-知乎专栏

  pip install requests

  以上就是Python爬取网页乱码的原因及解决方法的详细内容。更多详情请关注其他相关php中文网站文章!

  

  免责声明:本文转载于:segmentfault,如有侵权,请联系删除

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线