Node.js,原本是用来做Js服务器的,但是现在咱们一起来使用他做个抓取
关键是抓取到网页之后如何获取到想要的数据呢?然后就发现了cheerio,用来解析html非常方便,就像在浏览器中使用jquery一样。
使用如下命令安装cheerio
npm install cheerio
Cheerio安装完成, 我们就可以开始工作了。 首先让我们来看一段javascript代码 这段代码可以下载任意一个网页的内容。将其放入到curl.js中,并导出。
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的代码如下:
<a class="downbtn" href="http://mov.bn.netease.com/mobilev/2013/1/F/G/S8KTEF7FG.mp4" id="M8KTEKR84" target="_blank"></a>
我们取到其中的href属性,只需要进行如下选择即可
$("a.downbtn").attr("href");
在是现实,我们可以在index.js中写入如下代码
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
这样就可以在命令框里面打印出页面上所有的视频地址。如下图