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(一)--- Node.js简介及安装开发环境
May 20 NodeJs
Nodejs Post请求报socket hang up错误的解决办法
Sep 25 NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
nodejs中express入门和基础知识点学习
Sep 13 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 NodeJs
Nodejs 微信小程序消息推送的实现
Jan 20 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
php自定义时间转换函数示例
2016/12/07 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
解读Python中degrees()方法的使用
2015/05/18 Python
python删除列表内容
2015/08/04 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
python实现自主查询实时天气
2018/06/22 Python
Django model序列化为json的方法示例
2018/10/16 Python
Django中的cookie和session
2019/08/27 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
思想品德自我鉴定
2013/10/12 职场文书
技术学校毕业生求职信分享
2013/12/02 职场文书
初中校园广播稿
2014/02/02 职场文书
校园环保广播稿(3篇)
2014/09/15 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
整改通知书
2015/04/20 职场文书
计划生育责任书
2015/05/09 职场文书
原告离婚代理词
2015/05/23 职场文书