學習nodejs已經(jīng)有段時間币呵,網(wǎng)上很多nodejs爬蟲的文章,所以著手練習寫一段nodejs爬取鼎鼎大名的nodejs中文社區(qū)精華板塊大神們的頭像并且把圖片下載以他們的昵稱命名缚柳。
- 詳細代碼如下所示宙刘,本文用到幾個模塊患朱,主要是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);
})
}