学习nodejs已经有段时间,网上很多nodejs爬虫的文章,所以着手练习写一段nodejs爬取鼎鼎大名的nodejs中文社区精华板块大神们的头像并且把图片下载以他们的昵称命名。
- 详细代码如下所示,本文用到几个模块,主要是request(作为http代理端),cheerio(类似于浏览器端的jquery),核心模块(fs,path):
const request=require('request');
const cheerio=require('cheerio');
const fs=require('fs');
const path=require('path');
const url="https://cnodejs.org/?tab=good&page=";
for(let i=1;i<=16;i++){
request(url+i,(error,response,body)=>{
if(error && response.statusCode==200){
console.log(error);
}
accepteData(body);
});
}
function accepteData(data){
let $=cheerio.load(data);
let userNames=$('.user_avatar img').toArray();
for(let i=0;i<userNames.length;i++){
let src=userNames[i].attribs.src;
let filename=basicName(userNames[i].attribs.title);
downloadFile(src,filename,()=>{
console.log('loading image'+i);
});
}
}
function basicName(addr){
let filename=path.basename(addr);
return filename;
}
function downloadFile(uri,filename,cb){
request.head(uri,(error,response,body)=>{
if(error){
uri='https:'+uri;
}
request(uri).pipe(fs.createWriteStream('images/'+filename+'.jpg')).on('close', cb);
})
}