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的图片,就是百度的首页截图

但是在这里遇到一个问题: 如果把上诉11行代码放到,else中,函数page.open()外,执行不能生成图片;如果放在整个else外,也不能生成图片;这两种情况都不执行page.open()函数,控制台也没输出。
求具体原因,还望大家能帮我解答下:

乱码的问题,明天继续。列子说明和实践明天继续。睡觉了。。


                       

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 英语差考研复试怎么办 高中被学校开除怎么办 bois密码忘记了怎么办 xp系统管理员账号停用怎么办 学业负担太重怎么办 小学生手册丢了怎么办 自己不会写论文怎么办 写论文很心慌怎么办 写论文没有词怎么办 亲人入了邪教怎么办 小孩脾气很倔怎么办 研究生读不下去怎么办 国外打工生活费不够怎么办 本科学位被追回怎么办 本科学位丢了怎么办 国外留学挂科怎么办 英国预科被劝退怎么办? 如果预科没合格怎么办 研究生学费太贵怎么办 澳洲移民配额用不完怎么办 去美国探亲怎么办签证 去伊朗的签证怎么办 房产证被偷了怎么办 打黑工被发现怎么办 几年前被犬咬没打针怎么办 对狂犬疫苗过敏怎么办 想去墨尔本留学怎么办 大学没交学费会怎么办 交学费收据丢了怎么办 上海浦东金科苑幼儿园统筹怎么办 红酒瓶塞掉了怎么办 红酒瓶塞丢了怎么办 收入证明没有公章怎么办 父母没工作怎么办签证 在温哥华怎么办新西兰签证 上班第一天无聊怎么办 上班紧张不自信怎么办 销售到了30岁怎么办 转行会计没经验怎么办 澳洲coe被取消怎么办 父母不同意嫁远怎么办