欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬虫利器:PhantomJS快速入门

程序员文章站 2022-04-26 10:29:59
...

 

         完成PhantomJS安装配置完成之后,下面进行简单的入门操作。首先通过一个小例子来演示PhantomJS,在电脑上新建一个JavaScript文件,在里面输入代码:

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

在命令行输入:

phantomjs test.js

爬虫利器:PhantomJS快速入门

输出内容为Hello, world!。代码中的第一句话是控制台输出,第二句是终止程序执行,要不然程序会一直执行下去。通过这个例子已经了解了PhantomJS的基本操作,下面介绍一些简单的功能。

(一)页面加载

通过PhantomJS, 一个网页可以被加载 、分析和通过创建网页对象呈现。 下面演示一个简单的页面加载的例子, 访问我的博客地址: https://blog.csdn.net/qq_16669583, 并将当前 页面进行截图保存。 pageload.js代码如下:

var page = require('webpage').create();
page.open('https://blog.csdn.net/qq_16669583',function(status){
	console.log("Status: "+ status);
	if (status === "success") {
		page.render('lmrzero.png');
	}
	phantom.exit();
})

继续执行:

phantomjs test.js

爬虫利器:PhantomJS快速入门

该代码首先使用webpage模块创建一个page对象,然后通过page对象打开相应的网址,如果请求响应状态为success那么则使用render方法保存当前页面截图。

除了打开网页截图之外, 还可以对网页的打开进行测速。下面的例子用来计算一个网页的加载速度, 同时还用到了给JavaScript脚本传递参数的功能。test.js代码如下:

var page = require('webpage').create(),
	system = require('system'),
	t, address;
if (system.args.length === 1) {
	console.log('Usage: test.js <some URL>')
	phantomjs.exit();
}
t = Date.now();
address = system.args[1];
page.open(address, function(status){
	if (status != 'success') {
		console.log('FAIL to load the address');
	} else {
		t = Date.now() - t;
		console.log('Loading ' + system.args[1]);
		console.log('Loading time ' + t + ' msec');
	}
	phantom.exit();
});

在命令行执行:

phantomjs test.js https://blog.csdn.net/qq_16669583

结果如下:

爬虫利器:PhantomJS快速入门

首先使用webpage模块创建一个page 对象, 使用system模块获取系统对象system, 并声明了两个变量t 和address, 用来保存时间和传入 参数。 如果传入参数的长度等千1, 说明要加载的地址没有传入, 进行提示并退出phantomjs。 为什么要等于l呢?因为phantomjs test.js第一个参数是test.js。 接着获取当前的时间, 然后打开网页,获取加载完成后的时间, 进行相减即可。

(二)代码评估

为了评估网页中的JavaScript代码, 可以利用evaluate。这个执行是“沙盒式”的, 它不会去执行网页外的JavaScript代码。evaluate方法可以返回一个对象, 然而返回值仅限于对象,不能包含函数(或闭包)。比如我们可以使用evaluate方法获取https://blog.csdn.net/qq_16669583/article/details/105900250页面的标题, test.js代码如下:

var url = 'https://blog.csdn.net/qq_16669583/article/details/105900250';
var page = require ('webpage').create () ;
page.open(url, function(status) {
	var title = page.evaluate(function() {
		return document.title;
	});

	console.log('Page title is ' + title);
	phantom.exit();
});

执行命令:

phantomjs test.js

爬虫利器:PhantomJS快速入门

(三)屏幕捕获

前面介绍了将网页保存为一张图片,下面详细介绍这一功能。PhantomJS不仅仅可以将网页保存为图片还可以将其保存为jpg、gif和pdf格式,下面给出pdf的代码:

var page = require('webpage').create();
page.open('https://blog.csdn.net/qq_16669583',function(status){
	console.log("Status: "+ status);
	if (status === "success") {
		page.render('lmrzero.pdf');
	}
	phantom.exit();
})

代码与前面保存png格式一致,只是将文件后缀换成pdf。

PhantomJS不仅可以将页面转化为不同的文件格式, 还可以对视图进行缩放和裁剪, 主要用到page对象中两个非常重要的属性: viewportSize和clipRect。 viewportSize是视区的大小,其作用可以看做是将打开的浏览器窗口进行缩放 。 clipRect是在这个视区中裁剪矩形的大小, 需要四个参数, 前两个是基准点, 后两个参数是宽高。下面将pageload.js进行改动,代码如下:

var page = require ('webpage').create ();
page.viewportSize = { width: 1024, height: 768 };
page.clipRect= {top: 0, left: 0, width: 512, height: 256 };
page.open ('https://blog.csdn.net/qq_16669583', function(status) {
	console.log ("Status: " + status);
	if (status === "success") {
		page.render ('lmrzerojt.png');
	}
	phantom.exit();
});

爬虫利器:PhantomJS快速入门

本文内容基于《Python爬虫开发与项目实战》

 

 

相关标签: 爬虫