动态渲染页面抓取——Splash

在前面一章我们了解了 Ajax 的分析和抓取方式,这种页面其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax 我们仍然可以借助于 Requests 或 Urllib 来实现数据的抓取。

不过 JavaScript 动态渲染的页面不止 Ajax 这一种。比如中国青年网:http://news.youth.cn/gn/,它的分页部分是由 JavaScript 生成的,并非原始 HTML 代码,这其中并不包含 Ajax 请求。如 ECharts 的官方实例:http://echarts.baidu.com/demo.html#bar-negative,其图形都是经过 JavaScript 计算之后生成的。再有淘宝这种页面,它即使是 Ajax 获取的数据,但是其 Ajax 接口含有很多加密参数,我们难以直接找出其规律,也很难直接分析 Ajax 来抓取。

但是数据总归是要抓取的,为了解决这些问题,我们可以直接使用模拟浏览器运行的方式来实现,这样我们就可以做到浏览器看到是什么样,抓取的源码就是什么样,也就是可见即可爬。这样我们就不用再去管网页内部的 JavaScript 用了什么算法渲染页面,不用管网页后台的 Ajax 接口到底有哪些参数,利用模拟浏览器的方式我们都可以直接获取 JavaScript 渲染的最终结果,只要能在浏览器中看到,我们都能抓取。

在 Python 中提供了许多模拟浏览器运行的库,如 Selenium、Splash、PyV8、Ghost 等等,本章我们介绍一下其中 Selenium 和 Splash 的用法,有了它们,我们就不用再为动态渲染的页面发愁了。

相关库的安装

Splash

Splash 是一个 JavaScript 渲染服务,是一个带有 HTTP API 的轻量级浏览器,同时它对接了 Python 中的 Twisted和 QT 库,利用它我们同样可以实现动态渲染页面的抓取。

安装Splash 需要安装docker,

https://www.cnblogs.com/321lxl/p/9536616.html

https://blog.csdn.net/Mr_ZhangYin/article/details/84800141

docker

关于docker的介绍:http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

https://www.cnblogs.com/wmyskxz/p/10943169.html

https://blog.csdn.net/vitaair/article/details/80894890

https://blog.csdn.net/Jwast/article/details/79115268

 书:https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md

镜像:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

https://blog.csdn.net/chengly0129/article/details/68944269

posted @ 2019-05-29 23:52  舒畅123  阅读(454)  评论(0编辑  收藏  举报