java 与 phantomjs 的运用 (一)
来源:互联网 发布:安卓优化神器 编辑:程序博客网 时间:2024/06/07 01:39
phantomjs 第一次听说。之前没有用过,但是跟爬虫有关,所以没事就研究下。刚刚研究,一些东西还不知道是什么,但是先看看怎么用,能用来干什么吧。
之前的爬虫,我都是基于httpClient + jsoup 完成的,具体的思路就是httpClient爬取整个页面,然后在对页面进行分析,用jsoup或者是正则去获取自己想要的内容。
httpClinet 效率很高,响应速度快。但是有些页面返回的内容是基于JS加载或者异步请求的,当你用httpClinet去请求url时,返回的页面中没有你想要的内容,因为当你用浏览器去请求这个url是浏览器会把一些这个请求所带的所有js全部执行。httpClinet 没有这个功能,换句话说,httpClinet不能执行JS和异步请求,这样就有一定的局限性,现在很多页面的内容都是异步加载过来的,比如说许多电商商品的价格等。
然而,最近听说,phantom是一个基于WebKit的服务器端JavaScript API。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。
具体是怎样的东西呢,说实话不懂,只能慢慢一步一步来学习。为了不让自己把之前学习的忘记,所以写了博客,其实就是笔记。
参考文档:http://www.woiweb.net/phantomjs-quick-use-tutorials.html
1.phantomjs的安装:安装包下载地址:http://phantomjs.org/download.html,包括Windows,Mac OS,Linux版本,自行选择对应 版本下载解压即可,其中带有一个example文件夹,里面有很多已经写好的代码供使用。
在参考文档中,说道安装完之后还要设置环境变量,具体指的什么不太清楚,我下载了windows版本的,安装的路径是 D:\Program Files (x86)
如图:
打开之后里面有个examples 文件,里面有很多例子,可供学习。 最主要的是里面有个phantomjs.exe这就是我们所要执行命令的执行器。
2.练习:
①:
我也是根据参考文档里面的例子和examples文件夹中的例子 一点一点自己手动敲的。
在phantomjs-1.9.7-windows 文件夹中建立自己的练习的文件夹 我这里创建了一个 xiaoming 的文件夹。
在xiaoming文件夹中 新建一个 js文件 命名为: hello.js
编辑js:
console.log('Hello,world!');phantom.exit();本人理解: console.log 相当于java中的 打印语句。(phantomjs api : http://phantomjs.org/api/fs/)
第一行将会在终端打印出字符串,第二行phantom.exit
将退出运行。
在该脚本中调用phantom.exit
是非常重要的,否则 PhantomJS 将根本不会停止。
下面开始执行这个js:第一:首先在phantomjs-1.9.7-windows 文件夹中,摁Shift + 鼠标右键,会出现一个 在此处打开命令窗口,然后点击。会出现一个命令窗口,如图:
然后在后面输入:phantomjs.exe xiaoming/hello.js
结果如下:
Hello,world!说明phantomjs安装成功,接下来我们就可以往下继续了。
②:跟着参考文档来继续:下面就是传参数的问题:
在examples文件夹中有一个arguments.js 就是参数的传递
var system = require('system');console.log(system.args.length);if (system.args.length === 1) { console.log('Try to pass some args when invoking this script!');} else { system.args.forEach(function (arg, i) { console.log(i + ':' + arg); });}phantom.exit();
我在第二行加入一句打印,这是会发现,当不写参数时,参数的长度为1:
运行命令:phantomjs.exeexamples/arguments.js
结果如下:
1Try to pass some args when invoking this script<span style="font-family:Microsoft YaHei;">!</span>
传参命令:phantomjs.exe examples/arguments.js a b c
传入 a b c 三个参数,中间用空格隔开:
结果如下:
40:examples/arguments.js1:a2:b3:c我们会发现,examples/arguments.js 是phantomjs的第一个参数,这与参考文档中的结果不一样,所以还是动手自己做做比较好。那么我们不想打印第一个参数怎么办,很简单,在js中加一句判断即可:
var system = require('system');console.log(system.args.length);if (system.args.length === 1) { console.log('Try to pass some args when invoking this script!');} else { system.args.forEach(function (arg, i) {if(i>0){console.log(i + ':' + arg);} });}phantom.exit();然后再次运行,结果如下:
41:a2:b3:c具体为什么是这样,我也不知道,只是想学会用,慢慢研究api相信会明白的。
③:phantomjs的截图功能:
通过创建一个网页对象,一个网页可以被加载,分析和渲染。
下面的脚本将示例页面对象最简单的用法,它加载 http://www.baidu.com 并且将它保存为一张图片.这里将会把url作为一个参数参入,并且输出中文尝试一下。
代码如下:(在xiaoming文件夹中创建wen.js)
var page = require("webpage").create(); //网页对象var system = require("system");//系统对象if(system.args.length==1){console.log("请输入所要请求的url");phantom.exit();}else{page.open(system.args[1],function(){console.log("arg" + ":" + system.args[1]);page.render(1 + ".png");phantom.exit();});}当不传入参数时,会进入if中,打印一句中文,但是这个中文是乱码:
执行命令: phantomjs.exe xiaoming/web.js http://www.baidu.com
结果如下:
arg:http://www.baidu.com这是会在phantomjs-1.9.7-windows文件夹中生成一个 1.png的图片,就是百度的首页截图
求具体原因,还望大家能帮我解答下:
乱码的问题,明天继续。列子说明和实践明天继续。睡觉了。。
- java 与 phantomjs 的运用 (一)
- Java爬虫进阶-Selenium+PhantomJs的运用
- Java爬虫进阶-Selenium+PhantomJs的运用
- Phantomjs 与 Chrome 的一点区别
- Java 生产者 与 消费者 的实际运用
- Java关于短路与&&的巧妙运用
- Java之网络爬虫WebCollector+selenium+phantomjs(一)
- Java之网络爬虫WebCollector+selenium+phantomjs(一)
- 学习phantomjs(一)(phantomjs关于页面跳转的问题)
- quartz的运用(一)
- C++11 理解 (一) 之 auto与decltype的运用
- Runtime的介绍与简单运用(一)
- python selenium,PhantomJS运用 抓取滚动条滚动加载的页面, js动作操作,模拟登陆
- java类设计原则的简单运用实例一
- Java运用心得(一)
- phantomjs 执行时间超过一分钟的线程。杀死
- casperjs(一),比phantomjs更有戏的爬虫工具
- Selenium 与PhantomJS
- X210 GCC编译器更换
- (张龙讲学)java web学习---javascript脚本
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- logback的前世今生
- hdu 1045 || zoj 1002 Fire Net(搜索:DFS+水题)
- java 与 phantomjs 的运用 (一)
- poj1584
- IOS中KVC和KVO理解
- 隐藏软件键盘的方法
- 连接池连接Mysql数据库
- 《Effective C++》学习笔记
- 华为加班文化害死人
- hdu1013 Digital Roots
- poj 1376 Robot (BFS)