搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 规划数据分析助手 > 【爬虫利器】Python爬虫利器四之PhantomJS的用法1

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

规划数据分析助手 2017-11-30
 

规划数据分析助手!

专注规划数据分析与可视化方法

Python爬虫利器四之PhantomJS的用法1


前言


大家有没有发现之前我们写的爬虫都有一个共性,就是只能爬取单纯的html代码,如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没天理了。所以,我们需要有一些好用的工具来帮助我们像浏览器一样渲染JS处理的页面。


其中有一个比较常用的工具,那就是


PhantomJS: http://phantomjs.org/

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎。


它原生支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG。


好,接下来我们就一起来了解一下这个神奇好用的库的用法吧。


安装

PhantomJS安装方法有两种,一种是下载源码之后自己来编译,另一种是直接下载编译好的二进制文件。然而自己编译需要的时间太长,而且需要挺多的磁盘空间。官方推荐直接下载二进制文件然后安装。


大家可以依照自己的开发平台选择不同的包进行下载: http://phantomjs.org/download.html

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

当然如果你不嫌麻烦,可以选择: http://phantomjs.org/build.html

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

然后自己编译。


目前(2016/3/21)最新发行版本是 v2.1,


安装完成之后命令行输入: phantomjs –v


如果正常显示版本号,那么证明安装成功了。如果提示错误,那么请重新安装。


本文介绍大部分内容来自于官方文档,博主对其进行了整理,学习更多请参考

http://phantomjs.org/quick-start.html

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

快速开始

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

页面加载


可以利用 phantom 来实现页面的加载,下面的例子实现了页面的加载并将页面保存为一张图片。

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

首先创建了一个webpage对象,然后加载本站点主页,判断响应状态,如果成功,那么保存截图为 example.png


以上代码命名为 pageload.js,命令行: phantomjs pageload.js


发现执行成功,然后目录下多了一张图片,example.png

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

因为这个 render 方法,phantom 经常会用到网页截图的功能。

测试页面加载速度

下面这个例子计算了一个页面的加载速度,同时还用到了命令行传参的特性。新建文件保存为 loadspeed.js

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

程序判断了参数的多少,如果参数不够,那么终止运行。然后记录了打开页面的时间,请求页面之后,再纪录当前时间,二者之差就是页面加载速度。

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

运行结果

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

这个时间包括JS渲染的时间,当然和网速也有关。

代码评估

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

利用 evaluate 方法我们可以获取网页的源代码。这个执行是“沙盒式”的,它不会去执行网页外的 JavaScript 代码。evalute 方法可以返回一个对象,然而返回值仅限于对象,不能包含函数(或闭包)

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

以上代码获取了百度的网站标题。

Page title is 百度一下,你就知道

任何来自于网页并且包括来自 evaluate() 内部代码的控制台信息,默认不会显示。

需要重写这个行为,使用 onConsoleMessage 回调函数,示例可以改写成

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

这样的话,如果你用浏览器打开百度首页,打开调试工具的console,可以看到控制台输出信息。

重写了 onConsoleMessage 方法之后,可以发现控制台输出的结果和我们需要输出的标题都打印出来了。

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

屏幕捕获

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

因为 PhantomJS 使用了 WebKit内核,是一个真正的布局和渲染引擎,它可以像屏幕截图一样捕获一个web界面。因为它可以渲染网页中的人和元素,所以它不仅用到HTML,CSS的内容转化,还用在SVG,Canvas。可见其功能是相当强大的。


下面的例子就捕获了github网页的截图。上文有类似内容,不再演示。

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

除了 png 格式的转换,PhantomJS还支持 jpg,gif,pdf等格式。

https://github.com/ariya/phantomjs/blob/master/examples/rasterize.js

其中最重要的方法便是 viewportSize 和 clipRect 属性。


viewportSize 是视区的大小,你可以理解为你打开了一个浏览器,然后把浏览器窗口拖到了多大。


clipRect 是裁切矩形的大小,需要四个参数,前两个是基准点,后两个参数是宽高。


通过下面的小例子感受一下。

【爬虫利器】Python爬虫利器四之PhantomJS的用法1


运行结果

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

就相当于把浏览器窗口拖到了 1024×768 大小,然后从左上角裁切出了 1024×768 的页面。

网络监听

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

因为 PhantomJS 有网络通信的检查功能,它也很适合用来做网络行为的分析。

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

当接受到请求时,可以通过改写onResourceRequested和onResourceReceived回调函数来实现接收到资源请求和资源接受完毕的监听。例如

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

运行结果会打印出所有资源的请求和接收状态,以JSON格式输出。


规划数据分析助手

【爬虫利器】Python爬虫利器四之PhantomJS的用法1 【爬虫利器】Python爬虫利器四之PhantomJS的用法1
  【爬虫利器】Python爬虫利器四之PhantomJS的用法1
【爬虫利器】Python爬虫利器四之PhantomJS的用法1
【爬虫利器】Python爬虫利器四之PhantomJS的用法1

DSJGHZNT

【爬虫利器】Python爬虫利器四之PhantomJS的用法1

专注规划数据分析与可视化方法

方法|案例|交流

【爬虫利器】Python爬虫利器四之PhantomJS的用法1
记得扫描上方 二维码关注我们哟  

点击

阅读原文

了解更多详情

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【爬虫利器】Python爬虫利器四之PhantomJS的用法1》的版权归原作者「规划数据分析助手」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注规划数据分析助手微信公众号

规划数据分析助手微信公众号:DSJGHZNT

规划数据分析助手

手机扫描上方二维码即可关注规划数据分析助手微信公众号

规划数据分析助手最新文章

精品公众号随机推荐