NodeJS在SEO中的应用:快速采集分析页面

时间:15-03-15 栏目:SEO工具, 前端开发 作者:kyle 评论:2 点击: 7,167 次

NodeJS是最近非常火的一个JS框架,百科的介绍是轻量高效的基于事件驱动的JS运行平台。

 

使用NodeJS的原因有3个,一是它的代码写法基于JS,比较容易写。已经有入门级别的经验了。另一个就是它的一个库Cheerio,可以用几乎和jQuery一模一样的方式来操作源码里面的Dom元素。这个什么意思稍候会讲。第三个是它可以做为本地端,也可以布到服务器上去。

 

这2天研究比较多,应该算是初级入门了。正好有个需求要处理,于是应用了NodeJS。

 

一、安装

网上有很多的教程,下载https://nodejs.org,在Win系统下运行就可以搭上一个环境。下载Windows的Installer版本,双击安装,就成功了。

然后配置神器Sublime开始使用。

为Sublime添加实时调试运行,打开Sublime-》Tools-》Build System-》New Build System

在新打开的文件中写入下面的代码

{
    "cmd": ["node", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.javascript"
}

然后保存为NodeJS.sublime-build.

新建一个采集.js文件,设为NodeJS进行运行调试。

1

 

二、注意

在nodejs里面需要require(库名)的方式来引用一些外部的库,这些外部的库安装NodeJS的时候,已经放在C盘的programfiles下面了。但是直接require是无效的。

因为NodeJS提倡的是自己的代码用自己的库,所以还需要把库复制到采集.js这个文件下面。

引用的时候可以通过npm link 库名的方式,来把系统C盘的库引用到我们的项目下面。

2

 

三、直接使用了

//采集页面内容到本地
var http = require("http");
var cheerio = require('cheerio'); //引用cheerio模块,使在服务器端像在客户端上操作DOM,不用正则表达式,据基准测试:cheerio大约比JsDom快8倍。
var iconv = require('iconv-lite'); //解决编码转换模块
var BufferHelper = require('bufferhelper'); //关于Buffer我后面细说

var data=download('http://blog.csdn.net/kissliux/article/details/20466889',function (data) {
        //console.log(data);
        var $=cheerio.load(data);//载入到cheerio进行分析

        //遍历DIV
        // $('a').each(function(i,e){
        //   console.log($(e).attr('href'));
        // });
        
        // 遍历链接
        // $("a.downbtn").each(function(i, e) {
        //     console.log($(e).attr("href"));
        // });
        
        //var title=$('head>title').text();//读取Title信息
        //console.log(title);

        //分析得到页面基本信息
        var page = {
            "document": {
              title: $('head>title').text(),
              meta: {
                title: $('meta[property="og:title"]').attr("content"),
                author: $('meta[property="og:author"]').attr("content"),
                description: $('meta[name="description"]').attr("content"),
                url: $('meta[property="og:url"]').attr("content"),
                type: $('meta[property="og:type"]').attr("content"),
                image: $('meta[property="og:image"]').attr("content")
              },
              "content": undefined,
              "images": []
            }
        };

        //采集图片存入列表
        $('img').each(function(){
            var url = $(this).attr('src');
            if (page.document.images.indexOf(url) === -1){
              page.document.images.push(url);
            }
        });

        console.log(page);

    });
  
/**
 * 下载源码,自动识别编码
 * @param  {[type]}   url      [下载URL]
 * @param  {Function} callback [回调]
 * @return {[type]}            [description]
 */
function download(url, callback) {
  http.get(url, function(res) {
    var data = "";
    res.on('data', function (chunk) {
      data += chunk;
    });
    res.on("end", function() {
      callback(data);
    });
  }).on("error", function(e) {
    console.log("Got error: " + e.message);
    callback(null);
  });
}

 

上面我封好了download下载Html的内容。并进行处理的简单示例。注意require的库必须使用npm link 库名克隆到本地,或者自己下载包放到采集.js下面的node_modules目录下面,如果 没有这个目录,自己创建。

其中:

使用Cheerio要取页面的H1标题就简单了

var title=$('#article_details h1 a').text().trim();//读取Div下面的H1标签文本。

有没有jQuery强到爆的感觉。想分析页面什么的,还用正则吗?不用了。还用分析吗?不用了。找个大的Div,直接就读出来了。C#当然也可以用Htmp Agility pack来解析Dom。

但是为此我要新建一个项目,运行,调试,用NodeJS的话,在Sublime里面按Ctrl+B直接运行,可以马上看到效果。而且可以放到服务端。放到我的服务器上去。诸多好处也不大好形容。如果会点JS代码的话,上手应该非常快。

 

下面是运行效果

3

 

后面我把功能完善一点之后,会分享更完整的功能,读取文件中的URL采集,采集内容之后内容清洗,放进数据库或者导出文件。

 

关于安装:网上有很多安装之类的教程,这里没有细说,有兴趣的自己尝试一下。反正So Easy好用。

 

有问题欢迎加到我们的群里进行交流。

成都SEO小五嚎2句: 本文是(成都SEO小五)辛苦弄出来的,转载成都SEO小五原创的请保留链接: NodeJS在SEO中的应用:快速采集分析页面,3Q

NodeJS在SEO中的应用:快速采集分析页面:目前有2 条留言,牛逼吧!

  1. 技术要求挺强悍,有点难理解。。

    2015-04-20 2:34 pm [回复]
  2. 这个框架看来不错 😎

    2015-06-02 7:05 pm [回复]

来给哥评论评论


------====== 小五公告 ======------
成都SEO小五,专注成都搜索引擎优化。
小五善长站内外优化,C#、PHP开发,中英文SEO,Google中英文和百度优化技术。欢迎群内交流。伸手党请绕路,求资源的请绕开,求问题解答的请进群内交流。开放了一个QQ交流群:160750032。加入验证时请标注任何SEO相交字眼。友情链接直接Q我,收录正常,内容大部份原创、SEO或者程序开发、网络营销、线上推广等相关行业即可。

常用工具

赞助广告

来看过哥的人