Python爬虫学习(10):Selenium的好基友PhantomJS

  上一节中我们学习了selenium,用python来操作浏览器,在做网页自动化测试的时候最好不过了 。如果我们来做爬虫用一个带界面的浏览器似乎不太好吧,那可咋办呢?别着急,下来我们要介绍的就是一款不带界面的浏览器--PhantomJS。其是一个无界面的,可脚本编程的WebKit浏览器引擎,支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG。

  这里可能会有人问:为什么要用浏览器来抓取页面数据,不用之前我们之前直接通过Urllib获取网页然后分析呢? 这是因为我们通过urllib获取到仅仅是单个的html页面代码,但是实际上每个页面中会使用js来对页面进行渲染 ,简单来说就有可能会通过ajax来获取数据,然后在页面中添加新的元素,如果我们用urllib单单是获取到了html代码,却不能执行页面中js代码。所以我们需要这样的功能得到完全渲染后的页面,这样才不会丢掉数据。所以我们需要用到这个PantomJS咯。

1. PhantomJS的安装

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

          http://phantomjs.org/download.html

  我的环境是CentOS7--X64,所以下载了phantomjs-2.1.1-linux-x86_64.tar.bz2

  接下来我将其安装在/usr/local中,首先 解压到/usr/local/目录中,然后重命名,接着将其中的bin目录加入到环境变量中。

sudo tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/
sudo mv /usr/local/phantomjs-2.1.1-linux-x86_64 /usr/local/phantomjs
sudo ln -s /usr/local/phantomjs/bin/phantomjs /usr/local/bin/phantomjs

  测试以下,在任意目录中输入: phantomjs -v,看看能不能调用

  

2. Hello World

  hello.js文件:

console.log(‘Hello, world!‘);
phantom.exit();

  通过 phantomjs hello.js 执行。

  程序输出了 Hello,world!程序第二句话终止了 phantom 的执行。

  注意:phantom.exit();这句话非常重要,否则程序将永远不会终止。 

3. 页面加载

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

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

  

  运行之后会直接生成一张example.png的网页截图

  

  这里还可以设置窗口的大小以及截图时时的图片大小。viewportSize设置浏览器的窗口大小。clipRect设置截图的尺寸。

  

  执行完后的图片为:

  

3. 测试网页加载速度

  计算了一个页面的加载速度,同时还用到了命令行传参的特性。程序判断了参数的多少,如果参数不够,那么终止运行。然后记录了打开页面的时间,请求页面之后,再纪录当前时间,二者之差就是页面加载速度

  

  测试百度的加载速度,这个时间包括JS渲染的时间,当然和网速也有关。

  

4. 代码评估

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

  下边是一个显示网页的title的例子:

var page = require(‘webpage‘).create();
page.open("http://www.baidu.com", function(status) {
  var title = page.evaluate(function() {
    return document.title;
  });
  console.log(‘Page title is ‘ + title);
  phantom.exit();
});

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

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

  

  其执行的结果为:

  

5. 网络监听

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

  在请求的时候,可以通过改写onResourceRequested和onResourceReceived回调函数来实现接收到资源请求和资源接受完毕的监听。如下是答应请求的信息和返回的信息,以json的方式呈现。

  

  执行后的效果图:

  

6. 操作DOM

  脚本都是像在浏览器中运行的,所以标准的 JavaScript 的 DOM 操作和 CSS 选择器也是生效的。

  例如下面的例子就修改了 User-Agent,然后去访问httpuseragent.org,这个网页就是分析显示当前访问用的useragent,然后我们获取这个页面中来呈现useragent的元素,将其中的值打印出来。

  

  执行结果:

  

7. 使用附加库

  在1.6版本之后允许添加外部的JS库,比如下面的例子添加了jQuery,然后执行了jQuery代码

  

时间: 2024-10-14 00:42:46

Python爬虫学习(10):Selenium的好基友PhantomJS的相关文章

Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页

1.安装selenium pip install selenium Collecting selenium Downloading selenium-3.4.1-py2.py3-none-any.whl (931kB) 100% |████████████████████████████████| 942kB 573kB/s Installing collected packages: selenium Successfully installed selenium-3.4.1 2.安装phan

Python爬虫学习路线,强烈建议收藏这十一条

(一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量.数据结构.语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础:Python 简介 | 菜鸟教程 2.看完基础后,就是做一些小项目巩固基础,比方说:做一个终端计算器,如果实在找不到什么练手项目,可以在 Codecademy - learn to code, interactively, for free 上面进行练习. 如果时间充裕的

Python爬虫学习系列教程

Python爬虫学习系列教程 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴趣的童鞋有帮助,如果有机会期待与大家的交流. Python版本:2.7 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库

Python爬虫学习:四、headers和data的获取

之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.com/ 打开网页,按下F12键,如下图所示: 点击下方标签中的Network,如下: 之后再点击下图所示位置: 找到红色下划线位置所示的标签并点击,在右边的显示内容中可以查看到所需要的headers信息. 一般只需要添加User-Agent这一信息就足够了,headers同样也是字典类型: user

Python快速学习10: 循环的对象及设计 (生活的规律)

前言 系列文章:[传送门] 生活逐渐规律,按时睡觉.今天写博客,明天补时间看会书.慢慢的时间很珍惜 我很喜欢! 时钟就像个循环体,我们将它融入生活. 正文 循环对象的并不是随着Python的诞生就存在的,但它的发展迅速,特别是Python 3x的时代,循环对象正在成为循环的标准形式. 灵活的循环方式 (我晚饭后爱上了萨克斯,因为这是生活的一部分.属于我的特殊循环对象,它的按键就像循环方式,然后出来一首美丽的歌曲) 我的萨克斯偶像 循环对象 循环对象是这样一个对象,它包含有一个next()方法(_

Python爬虫学习:三、爬虫的基本操作流程

本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将数据或信息存入数据库中: 3.数据展示,即在Web端进行显示,并有自己的分析说明. 这次我先介绍第一个功能中所需要实现的基本操作: 爬虫的基本操作:      表示必须步骤           表示可选步骤 导入爬虫所需要的库(如:urllib.urllib2.BeautifulSoup.Scrap

2018/7/21 Python 爬虫学习

2018/7/21,这几天整理出来的一些Python 爬虫学习代码. import urllib2 response = urllib2.urlopen("http://baidu.com") html = response.read() print html 进一步,可以request import urllib2 req = urllib2.Request("http://www.baidu.com") response = urllib2.urlopen(re

爬虫学习 10.scrapy框架简介和基础应用

爬虫学习 10.scrapy框架简介和基础应用 今日概要 scrapy框架介绍 环境安装 基础使用 今日详情 一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板.对于框架的学习,重点是要学习其框架的特性.各个功能的用法即可. 二.安装 Linux: ``pip3 install scrapy Windows: ``a. p

Python爬虫利器:Selenium的用法

本文和大家分享的主要是python 爬虫 利器Selenium的相关内容,一起来看看吧,希望对大家 学习python爬虫有所帮助. Selenium  是什么?一句话,自动化测试工具.它支持各种浏览器,包括  Chrome , Safari , Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个  Selenium  的插件,那么便可以方便地实现 Web界面的测试.换句话说叫  Selenium  支持这些浏览器驱动.话说回来, PhantomJS 不也是一个浏览器吗,那么  S