var http = require("http");
var url = "http://www.alloyteam.com/";
var data = "";
// 创建一个请求
var req = http.request(url, function(res){
// 设置显示编码
res.setEncoding("utf8");
// 数据是 chunked 发送,意思就是一段一段发送过来的
// 我们使用 data 给他们串接起来
res.on('data', function(chunk){
data += chunk;
});
// 响应完毕时间出发,输出 data
res.on('end', function(){
// dealData(data);
console.log(data);
});
});
// 发送请求
req.end();
上面短短七八行代码,就拿到了 AlloyTeam 首页的代码,真的十分简单,如果是 https:// 就得引用 https 模块咯,都是差不多的。
2. 正则提取目标内容
先看下我们要抓取的内容:
由于没有使用其他库,我们没办法像操作 DOM 一样获取目标内容,不过写正则也挺简单的,比如我们要 获取标题/文章链接/摘要 这些内容,正则表达式为:
// function dealData
var reg = /<ul\s+class="articlemenu">\s+<li>\s+<a[^>]*>.*?<\/a>\s+<a href="(.*?)"[^>]*>(.*?)<\/a>[\s\S]*?<div\s+class="text">([\s\S]*?)<\/div>/g;
var res = [];
while(match = reg.exec(data)) {
res.push({
"url": match[1],
"title": match[2],
"excerpt": match[3]
});
}
这里的正则看起来有点晦涩,不过呢,正则在编程中十分基础的东西,如果没有太多的了解,建议先去搞清楚,这里就不细说啦。这里要强调的一点是:
reg.exec(data);
如果只写上面这句话,只会拿到第一个匹配结果,所以需要使用 while 循环来处理,没处理一次,正则匹配的位置就会往后推一下。其实上面这条语句执行后返回的是一个对象,其中包含一个 index 属性,具体可以查阅 JavaScript 正则的内容。
这里返回(res)的数据格式是: