苏飞论坛

标题: Node.js使用cheerio抓取网页数据DEMO [打印本页]

作者: 站长苏飞    时间: 2014-4-19 08:47
标题: Node.js使用cheerio抓取网页数据DEMO

Node.js,原本是用来做Js服务器的,但是现在咱们一起来使用他做个抓取


关键是抓取到网页之后如何获取到想要的数据呢?然后就发现了cheerio,用来解析html非常方便,就像在浏览器中使用jquery一样。

使用如下命令安装cheerio

   

[C#] 纯文本查看 复制代码
 npm install cheerio

Cheerio安装完成, 我们就可以开始工作了。 首先让我们来看一段javascript代码 这段代码可以下载任意一个网页的内容。将其放入到curl.js中,并导出。

[C#] 纯文本查看 复制代码
var http = require("http");

// Utility function that downloads a URL and invokes
// callback with the data.
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() {
    callback(null);
  });
}

exports.download = download;

然后是使用cheerio解析html,找到想要的数据。

我们先来自己分析一下页面。我们要抓取http://v.163.com/special/opencourse/englishs1.html这个页面中的视频,视频的地址都在下载的按钮里。其中一个下载按钮的html的代码如下:

[C#] 纯文本查看 复制代码
<a class="downbtn" href="http://mov.bn.netease.com/mobilev/2013/1/F/G/S8KTEF7FG.mp4" id="M8KTEKR84" target="_blank"></a>

我们取到其中的href属性,只需要进行如下选择即可

[C#] 纯文本查看 复制代码
$("a.downbtn").attr("href");

在是现实,我们可以在index.js中写入如下代码

[JavaScript] 纯文本查看 复制代码
var cheerio = require("cheerio");
var server = require("./curl");

var url = "http://v.163.com/special/opencourse/englishs1.html"

server.download(url, function(data) {
  if (data) {
    //console.log(data);

    var $ = cheerio.load(data);
    $("a.downbtn").each(function(i, e) {
        console.log($(e).attr("href"));
    });

    console.log("done");
  } else {
      console.log("error");
  }
});

然后执行

     node index.js

这样就可以在命令框里面打印出页面上所有的视频地址。如下图

(, 下载次数: 207)