无为清净楼资源网 Design By www.qnjia.com

上次介绍了怎么利用NodeJS + PhantomJS进行截图,但由于对每次截图操作,都启用了一个PhantomJS进程,所以并发量上去后,效率堪忧,所以我们重写了所有代码,并将其独立成为一个模块,方便调用。
如何改进?控制线程数,以及单线程处理url数量。使用Standard Output & WebSocket 进行通讯。添加缓存机制,目前使用Javascript Object进行。对外提供简易的接口。

设计图

NodeJS的url截取模块url-extract的使用实例

 

依赖 & 安装

由于PhantomJS 1.9.0+才开始支持Websocket,所以我们先要确定在PATH中的PhantomJS是为1.9.0以上版本。在命令行键入:

$ phantomjs -v

如果能返回版本号1.9.x,则可以继续操作。如果版本过低,或者出现错误,请到PhantomJS官网下载最新版本。

如果你已经安装了Git,或者拥有Git Shell,那么在命令行键入:
$ npm install url-extract

进行安装。

一个简单的例子

比如我们要截取百度首页,那么可以这样:

复制代码 代码如下: module.exports = (function () { "use strict" var urlExtract = require('url-extract'); urlExtract.snapshot('http://www.baidu.com', function (job) { console.log('This is a snapshot example.'); console.log(job); process.exit(); }); })();

下面是打印:

NodeJS的url截取模块url-extract的使用实例

其中,image属性就是截图相对于工作路径的地址。我们可以使用Job的getData接口来得到更清楚的数据,例如:

复制代码 代码如下: module.exports = (function () { "use strict" var urlExtract = require('url-extract'); urlExtract.snapshot('http://www.baidu.com', function (job) { console.log('This is a snapshot example.'); console.log(job.getData()); process.exit(); }); })();

打印就变成了这样了:

NodeJS的url截取模块url-extract的使用实例

image表示截图相对于工作路径的地址,status表示状态是否正常,true代表正常,false代表截图失败。

更多例子请参见:https://github.com/miniflycn/url-extract/tree/master/examples

 

主要API

.snapshot

url快照

.snapshot(url, [callback]).snapshot(urls, [callback]).snapshot(url, [option]).snapshot(urls, [option])
复制代码 代码如下: url {String} 要截取的地址 urls {Array} 要截取的地址数组 callback {Function} 回调函数 option {Object} 可选参数 ┝ id {String} 自定义url的id,如果第一个参数是urls,此参数无效 ┝ image {String} 自定义截图的保存地址,如果第一个参数是urls,此参数无效 ┝ groupId {String} 定义一组url的groupId,用于返回时候辨认是哪一组url ┝ ignoreCache {Boolean} 是否忽略缓存 ┗ callback {Function} 回调函数

.extract

url信息抓取,并获取快照

.extract(url, [callback]).extract(urls, [callback]).extract(url, [option]).extract(urls, [option])

url {String} 要截取的地址

urls {Array} 要截取的地址数组

callback {Function} 回调函数

option {Object} 可选参数

┝ id {String} 自定义url的id,如果第一个参数是urls,此参数无效

┝ image {String} 自定义截图的保存地址,如果第一个参数是urls,此参数无效

┝ groupId {String} 定义一组url的groupId,用于返回时候辨认是哪一组url

┝ ignoreCache {Boolean} 是否忽略缓存

┗ callback {Function} 回调函数

Job(类)

每一个url对应一个job对象,url的相关信息由job对象存储。

Field

url {String} 链接地址content {Boolean} 是否抓取页面的title和description信息id {String} job的idgroupId {String} 一堆job的组idcache {Boolean} 是否开启缓存callback {Function} 回调函数image {String} 图片地址status {Boolean} job当前是否正常

Prototype

getData() 获取job的相关数据

 

全局配置

url-extract根目录中的config文件可以进行全局配置,默认如下:

module.exports = { wsPort: 3001, maxJob: 100, maxQueueJob: 400, cache: 'object', maxCache: 10000, workerNum: 0};
wsPort {Number} websocket占用的端口地址maxJob {Number} 每个PhantomJS线程可并发worker数maxQueueJob {Number} 最大等待工作数量,0表示不限制,超过该数量,任何工作都直接返回失败(即status = false)cache {String} 缓存实现,目前只有object实现maxCache {Number} 最大缓存链接数workerNum {Number} PhantomJS线程数,0表示和CPU数量相同

 

一个简单的服务例子

https://github.com/miniflycn/url-extract-server-example

注意,需要安装connect和url-extract:

$ npm install

如果你下载了网盘的文件,那么请安装connect:

$ npm install connect

然后键入:

$ node bin/server

打开:

http://localhost:3000

查看效果。

 

;

标签:
url截取

无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。