<p>Hi,大家好。作为一个NodeJS beginer,我做了一个url信息截取,快照模块,欢迎试用。</p> <p>url-extract是一个NodeJS的url信息截取模块,其使用PhantomJS进行截图,可截取url快照,以及抓取其title和description。</p> <p>项目地址:</p> https://github.com/miniflycn/url-extract <p> </p> <h3><span style=“font-size: 14pt;”><strong>设计图</strong></span></h3> <p><img src=“http://images.cnitblog.com/blog/372204/201309/12205700-29e94e330baa49e28611b1b3b557bfa4.jpg” alt="" /></p> <p> </p> <h3><span style=“font-size: 14pt;”><strong>依赖 & 安装</strong></span></h3> <p>由于PhantomJS 1.9.0+才开始支持Websocket,所以我们先要确定在PATH中的PhantomJS是为1.9.0以上版本。在命令行键入:</p> <blockquote> <p>$ phantomjs -v</p> </blockquote> <p>如果能返回版本号1.9.x,则可以继续操作。如果版本过低,或者出现错误,请到<a href=“http://phantomjs.org/”>PhantomJS官网</a>下载最新版本。</p> <p>如果你已经安装了Git,或者拥有Git Shell,那么在命令行键入:</p> <blockquote> <p>$ npm install url-extract</p> </blockquote> <p>进行安装。</p> <p>如果没有,那么请在下面的连接下载整个项目:</p> http://pan.baidu.com/share/link?shareid=1055562065&uk=855675565 <p> </p> <h3><span style=“font-size: 14pt;”><strong>一个简单的例子</strong></span></h3> <p>比如我们要截取百度首页,那么可以这样:</p> <div class=“cnblogs_code”> <pre>module.exports = (<span style=“color: #0000ff;”>function</span><span style=“color: #000000;”> () { </span>“use strict” <span style=“color: #0000ff;”>var</span> urlExtract = require(‘url-extract’<span style=“color: #000000;”>); urlExtract.snapshot(</span>‘http://www.baidu.com’, <span style=“color: #0000ff;”>function</span><span style=“color: #000000;”> (job) { console.log(</span>‘This is a snapshot example.’<span style=“color: #000000;”>); console.log(job); process.exit(); }); })();</span></pre> </div> <p>下面是打印:</p> <p><img src=“http://images.cnitblog.com/blog/372204/201309/12213019-2115155abd6a494e8b86a74a5b4be98b.png” alt="" /></p> <p>其中,image属性就是截图相对于工作路径的地址。我们可以使用Job的getData接口来得到更清楚的数据,例如:</p> <div class=“cnblogs_code”> <pre>module.exports = (<span style=“color: #0000ff;”>function</span><span style=“color: #000000;”> () { </span>“use strict” <span style=“color: #0000ff;”>var</span> urlExtract = require(‘url-extract’<span style=“color: #000000;”>); urlExtract.snapshot(</span>‘http://www.baidu.com’, <span style=“color: #0000ff;”>function</span><span style=“color: #000000;”> (job) { console.log(</span>‘This is a snapshot example.’<span style=“color: #000000;”>); console.log(job.getData()); process.exit(); }); })();</span></pre> </div> <p>打印就变成了这样了:</p> <p><img src=“http://images.cnitblog.com/blog/372204/201309/12213302-4b37c8e6ff5248999ce4ce382a2f6b4d.png” alt="" /></p> <p>image表示截图相对于工作路径的地址,status表示状态是否正常,true代表正常,false代表截图失败。</p> <p>更多例子请参见:</p> https://github.com/miniflycn/url-extract/tree/master/examples <p> </p> <h3><span style=“font-size: 14pt;”><strong>主要API</strong></span></h3> <p><strong>.snapshot</strong></p> <p><strong>url快照</strong></p> <ul> <li>.snapshot(url, [callback])</li> <li>.snapshot(urls, [callback])</li> <li>.snapshot(url, [option])</li> <li>.snapshot(urls, [option])</li> </ul> <blockquote> <p>url {String} 要截取的地址</p> <p>urls {Array} 要截取的地址数组</p> <p>callback {Function} 回调函数</p> <p>option {Object} 可选参数</p> <p>┝ id {String} 自定义url的id,如果第一个参数是urls,此参数无效</p> <p>┝ image {String} 自定义截图的保存地址,如果第一个参数是urls,此参数无效</p> <p><span>┝ groupId {String} 定义一组url的groupId,用于返回时候辨认是哪一组url</span></p> <p><span><span>┝ ignoreCache {Boolean} 是否忽略缓存</span></span></p> <p>┗ callback {Function} 回调函数</p> </blockquote> <p><strong>.extract</strong></p> <p><strong>url信息抓取,并获取快照</strong></p> <ul> <li>.extract(url, [callback])</li> <li>.extract(urls, [callback])</li> <li>.extract(url, [option])</li> <li>.extract(urls, [option])</li> </ul> <blockquote> <p>url {String} 要截取的地址</p> <p>urls {Array} 要截取的地址数组</p> <p>callback {Function} 回调函数</p> <p>option {Object} 可选参数</p> <p>┝ id {String} 自定义url的id,如果第一个参数是urls,此参数无效</p> <p>┝ image {String} 自定义截图的保存地址,如果第一个参数是urls,此参数无效</p> <p>┝ groupId {String} 定义一组url的groupId,用于返回时候辨认是哪一组url</p> <p>┝ ignoreCache {Boolean} 是否忽略缓存</p> <p>┗ callback {Function} 回调函数</p> </blockquote> <p><strong>Job(类)</strong></p> <p>每一个url对应一个job对象,url的相关信息由job对象存储。</p> <p><strong>Field</strong></p> <blockquote> <ul> <li>url {String} 链接地址</li> <li>content {Boolean} 是否抓取页面的title和description信息</li> <li>id {String} job的id</li> <li>groupId {String} 一堆job的组id</li> <li>cache {Boolean} 是否开启缓存</li> <li>callback {Function} 回调函数</li> <li>image {String} 图片地址</li> <li>status {Boolean} job当前是否正常</li> </ul> </blockquote> <p><strong>Prototype</strong></p> <blockquote> <ul> <li>getData() 获取job的相关数据</li> </ul> </blockquote> <p> </p> <h3><span style=“font-size: 14pt;”><strong>全局配置</strong></span></h3> <p>url-extract根目录中的config文件可以进行全局配置,默认如下:</p> <div class=“cnblogs_code”> <pre>module.exports =<span style=“color: #000000;”> { wsPort: </span>3001<span style=“color: #000000;”>, maxJob: </span>100<span style=“color: #000000;”>, maxQueueJob: </span>400<span style=“color: #000000;”>, cache: </span>‘object’<span style=“color: #000000;”>, maxCache: </span>10000<span style=“color: #000000;”>, workerNum: </span>0<span style=“color: #000000;”> };</span></pre> </div> <blockquote> <ul> <li>wsPort {Number} websocket占用的端口地址</li> <li>maxJob {Number} 每个PhantomJS线程可并发worker数</li> <li>maxQueueJob {Number} 最大等待工作数量,0表示不限制,超过该数量,任何工作都直接返回失败(即status = false)</li> <li>cache {String} 缓存实现,目前只有object实现</li> <li>maxCache {Number} 最大缓存链接数</li> <li>workerNum {Number} PhantomJS线程数,0表示和CPU数量相同</li> </ul> </blockquote> <p> </p> <h3><span style=“font-size: 14pt;”><strong>一个简单的服务例子</strong></span></h3> https://github.com/miniflycn/url-extract-server-example <p>注意,需要安装connect和url-extract:</p> <blockquote> <p>$ npm install</p> </blockquote> <p>如果你下载了网盘的文件,那么请安装connect:</p> <blockquote> <p>$ npm install connect</p> </blockquote> <p>然后键入:</p> <blockquote> <p>$ node bin/server</p> </blockquote> <p>打开:</p> <blockquote> http://localhost:3000 </blockquote> <p>查看效果。</p> <p> </p>
赞