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的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
nodeJs内存泄漏问题详解
Sep 05 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
nodejs实现UDP组播示例方法
Nov 04 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 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
IIS6的PHP最佳配置方法
2007/03/19 PHP
php一些公用函数的集合
2008/03/27 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
Python如何急速下载第三方库详解
2020/11/02 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
总经理人事任命书
2014/06/05 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
MySQL Router的安装部署
2021/04/24 MySQL
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL