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


Posted in NodeJs onNovember 18, 2013

上次介绍了怎么利用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

查看效果。

 

;
NodeJs 相关文章推荐
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 NodeJs
NodeJS url验证(url-valid)的使用方法
Nov 18 #NodeJs
NodeJS与Mysql的交互示例代码
Aug 18 #NodeJs
利用NodeJS的子进程(child_process)调用系统命令的方法分享
Jun 05 #NodeJs
将nodejs打包工具整合到鼠标右键的方法
May 11 #NodeJs
用nodejs写的一个简单项目打包工具
May 11 #NodeJs
nodejs教程 安装express及配置app.js文件的详细步骤
May 11 #NodeJs
nodejs中exports与module.exports的区别详细介绍
Jan 14 #NodeJs
You might like
1 Tube Radio
2021/03/02 无线电
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
python 实现矩阵填充0的例子
2019/11/29 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
红领巾心向党广播稿
2014/01/19 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
小学国庆节活动总结
2015/03/23 职场文书