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学习笔记之FS文件模块
Jan 13 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
iPhone手机上搭建nodejs服务器步骤方法
Jul 06 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 NodeJs
详解nodejs 配置文件处理方案
Jan 02 NodeJs
nodejs dgram模块广播+组播的实现示例
Nov 04 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 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 date()日期时间函数详解
2010/05/16 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python实现周期性抓取网页内容的方法
2015/11/04 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
python同步两个文件夹下的内容
2019/08/29 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
python关于变量名的基础知识点
2020/03/03 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
高中学生自我评价范文
2014/09/23 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书