如何用Nodejs分析一个简单页面
本文目的
在浏览器地址栏中输入localhost:3000,在页面显示博客园首页的20篇文章标题。
过程分析
首先需要端口的监听,这就需要引入Node中最重要的模块之一express。其次需要对http://www.cnblogs.com/页面发送类似http的请求以获取页面数据进行分析,这里需要引入SuperAgent模块。最后为了能使请求得到的html源码进行类似dom一般的操作,需要引入cheerio模块。
express模块
首先第一步,我们要实现端口的监听,以便能将信息输出到页面上。
我们可以用http模块:
varhttp=require("http");
http.createServer(function(request,response){
response.writeHead(200,{"Content-Type":"text/html"});
response.write("HelloWorld!");
response.end();
}).listen(3000);
当然我们更可以用封装了http功能更加强大的express模块:
//这句的意思就是引入`express`模块,并将它赋予`express`这个变量等待使用。
varexpress=require(''express'');
//调用express实例,它是一个函数,不带参数调用时,会返回一个express实例,将这个变量赋予app变量。
varapp=express();
//app本身有很多方法,其中包括最常用的get、post、put/patch、delete,在这里我们调用其中的get方法,为我们的`/`路径指定一个handler函数。
//这个handler函数会接收req和res两个对象,他们分别是请求的request和response。
//request中包含了浏览器传来的各种信息,比如query啊,body啊,headers啊之类的,都可以通过req对象访问到。
//res对象,我们一般不从里面取信息,而是通过它来定制我们向浏览器输出的信息,比如header信息,比如想要向浏览器输出的内容。这里我们调用了它的#send方法,向浏览器输出一个字符串。
app.get(''/'',function(req,res){
res.send(''HelloWorld'');
});
//定义好我们app的行为之后,让它监听本地的3000端口。这里的第二个函数是个回调函数,会在listen动作成功后执行,我们这里执行了一个命令行输出操作,告诉我们监听动作已完成。
app.listen(3000,function(){
console.log(''appislisteningatport3000'');
});
SuperAgent模块
接着我们需要获取博客园首页的代码从而能进行分析。SuperAgent就是服务端可以发送getpost等http请求的模块,直接看代码,更多的api可以参考文档。
varexpress=require(''express'');
varsuperagent=require(''superagent'');
varapp=express();
app.get(''/'',function(req,res,next){
superagent
.get(''http://www.cnblogs.com/'')
.end(function(err,ans){
//常规的错误处理
if(err){
returnnext(err);
}
res.send(ans.text);
});
});
app.listen(3000,function(){
console.log(''appislisteningatport3000'');
});
cheerio模块
我们用SuperAgent模块获取了博客园的页面代码,而用cheerio则可以进行类似Jquery的css选择器操作。cheerio模块的详细api可以参考文档。
完整代码
varexpress=require(''express'');
varcheerio=require(''cheerio'');
varsuperagent=require(''superagent'');
varapp=express();
app.get(''/'',function(req,res,next){
superagent
.get(''http://www.cnblogs.com/'')
.end(funwww.wang027.comction(err,sres){//callback
//常规的错误处理
if(err){
returnnext(err);
}
//sres.text里面存储着网页的html内容,将它传给cheerio.load之后
//就可以得到一个实现了jquery接口的变量,我们习惯性地将它命名为`$`
//剩下就都是jquery的内容了
var$=cheerio.load(sres.text);
varans='''';
$(''.titlelnk'').each(function(index,item){
var$item=$(item);
ans+=$item.html()+''
'';
});
//将内容呈现到页面
res.send(ans);
});
});
app.listen(3000,function(){
console.log(''appislisteningatport3000'');
});
这时启动localhost:3000,页面就能显示博客园首页的20篇文章标题啦(虽然没样式不太美观)!(当然得先nodefileName.js)
当然我们也可以直接把内容输出在控制台:
varcheerio=require(''cheerio'');
varsuperagent=require(''superagent'');
superagent
.get(''http://www.cnblogs.com/'')
.end(function(err,sres){//callback
//常规的错误处理
if(err){
console.error(err);
}
//sres.text里面存储着网页的html内容,将它传给cheerio.load之后
//就可以得到一个实现了jquery接口的变量,我们习惯性地将它命名为`$`
//剩下就都是jquery的内容了
var$=cheerio.load(sres.text);
$(''.titlelnk'').each(function(index,item){
varwww.baiyuewang.net$item=$(item);
console.log($item.text());
});
});
|
|