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开发微博实例
Mar 25 NodeJs
nodejs创建web服务器之hello world程序
Aug 20 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 NodeJs
详解Nodejs之npm&package.json
Jun 15 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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
解析如何用php screw加密php源代码
2013/06/20 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
php中的依赖注入实例详解
2019/08/14 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
自学python用什么系统好
2020/06/23 Python
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
总裁岗位职责
2013/12/04 职场文书
给物业的表扬信
2014/01/21 职场文书
网吧消防安全责任书
2014/07/29 职场文书
公司表扬信格式
2015/05/04 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js