您好,登錄后才能下訂單哦!
這篇文章主要介紹“node.js簡(jiǎn)單爬蟲(chóng)的方法是什么”,在日常操作中,相信很多人在node.js簡(jiǎn)單爬蟲(chóng)的方法是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”node.js簡(jiǎn)單爬蟲(chóng)的方法是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
步驟一:安裝node.js
下載并安裝node,此步驟比較簡(jiǎn)單就不詳細(xì)解釋了,有問(wèn)題的可以直接問(wèn)一下度娘。
步驟二:建立工程
1)打開(kāi)dos命令條,cd進(jìn)入想要?jiǎng)?chuàng)建項(xiàng)目的路徑(我將此項(xiàng)目直接放在了E盤(pán),以下皆以此路徑為例);
2)mkdir node (創(chuàng)建一個(gè)文件夾用來(lái)存放項(xiàng)目,我這里取名為node);
3)cd 進(jìn)入名為node的文件夾,并執(zhí)行npm init初始化工程(期間會(huì)讓填寫(xiě)一些信息,我是直接回車(chē)的);
步驟三:創(chuàng)建爬取到的數(shù)據(jù)存放的文件夾
1)創(chuàng)建data文件夾用來(lái)存放發(fā)型師基本信息;
2)創(chuàng)建image文件夾用來(lái)存儲(chǔ)發(fā)型師頭像圖片;
此時(shí)工程下文件如下:
步驟四:安裝第三方依賴(lài)包(fs是內(nèi)置模塊,不需要單獨(dú)安裝)
1)npm install cheerio –save
2)npm install superagent –save
3)npm install async –save
4)npm install request –save
分別簡(jiǎn)單解釋一下上面安裝的依賴(lài)包:
cheerio:是nodejs的抓取頁(yè)面模塊,為服務(wù)器特別定制的,快速、靈活、實(shí)施的jQuery核心實(shí)現(xiàn),則能夠?qū)φ?qǐng)求結(jié)果進(jìn)行解析,解析方式和jQuery的解析方式幾乎完全相同;
superagent:能夠?qū)崿F(xiàn)主動(dòng)發(fā)起get/post/delete等請(qǐng)求;
async:async模塊是為了解決嵌套金字塔,和異步流程控制而生,由于nodejs是異步編程模型,有一些在同步編程中很容易做到的事情,現(xiàn)在卻變得很麻煩。Async的流程控制就是為了簡(jiǎn)化這些操作;
request:有了這個(gè)模塊,http請(qǐng)求變的超簡(jiǎn)單,Request使用簡(jiǎn)單,同時(shí)支持https和重定向;
步驟五:編寫(xiě)爬蟲(chóng)程序代碼
打開(kāi)hz.js,編寫(xiě)代碼:
var superagent = require('superagent'); var cheerio = require('cheerio'); var async = require('async'); var fs = require('fs'); var request = require('request'); var page=1; //獲取發(fā)型師處有分頁(yè)功能,所以用該變量控制分頁(yè) var num = 0;//爬取到的信息總條數(shù) var storeid = 1;//門(mén)店ID console.log('爬蟲(chóng)程序開(kāi)始運(yùn)行......'); function fetchPage(x) { //封裝函數(shù) startRequest(x); } function startRequest(x) { superagent .post('http://tweixin.yueyishujia.com/v2/store/designer.json') .send({ // 請(qǐng)求的表單信息Form data page : x, storeid : storeid }) // Http請(qǐng)求的Header信息 .set('Accept', 'application/json, text/javascript, */*; q=0.01') .set('Content-Type','application/x-www-form-urlencoded; charset=UTF-8') .end(function(err, res){ // 請(qǐng)求返回后的處理 // 將response中返回的結(jié)果轉(zhuǎn)換成JSON對(duì)象 if(err){ console.log(err); }else{ var designJson = JSON.parse(res.text); var deslist = designJson.data.designerlist; if(deslist.length > 0){ num += deslist.length; // 并發(fā)遍歷deslist對(duì)象 async.mapLimit(deslist, 5, function (hair, callback) { // 對(duì)每個(gè)對(duì)象的處理邏輯 console.log('...正在抓取數(shù)據(jù)ID:'+hair.id+'----發(fā)型師:'+hair.name); saveImg(hair,callback); }, function (err, result) { console.log('...累計(jì)抓取的信息數(shù)→→' + num); } ); page++; fetchPage(page); }else{ if(page == 1){ console.log('...爬蟲(chóng)程序運(yùn)行結(jié)束~~~~~~~'); console.log('...本次共爬取數(shù)據(jù)'+num+'條...'); return; } storeid += 1; page = 1; fetchPage(page); } } }); } fetchPage(page); function saveImg(hair,callback){ // 存儲(chǔ)圖片 var img_filename = hair.store.name+'-'+hair.name + '.png'; var img_src = 'http://photo.yueyishujia.com:8112' + hair.avatar; //獲取圖片的url //采用request模塊,向服務(wù)器發(fā)起一次請(qǐng)求,獲取圖片資源 request.head(img_src,function(err,res,body){ if(err){ console.log(err); }else{ request(img_src).pipe(fs.createWriteStream('./image/' + img_filename)); //通過(guò)流的方式,把圖片寫(xiě)到本地/image目錄下,并用發(fā)型師的姓名和所屬門(mén)店作為圖片的名稱(chēng)。 console.log('...存儲(chǔ)id='+hair.id+'相關(guān)圖片成功!'); } }); // 存儲(chǔ)照片相關(guān)信息 var html = '姓名:'+hair.name+'<br>職業(yè):'+hair.jobtype+'<br>職業(yè)等級(jí):'+hair.jobtitle+'<br>簡(jiǎn)介:'+hair.simpleinfo+'<br>個(gè)性簽名:'+hair.info+'<br>剪發(fā)價(jià)格:'+hair.cutmoney+'元<br>店名:'+hair.store.name+'<br>地址:'+hair.store.location+'<br>聯(lián)系方式:'+hair.telephone+'<br>頭像:<img src='+img_src+' >'; fs.appendFile('./data/' +hair.store.name+'-'+ hair.name + '.html', html, 'utf-8', function (err) { if (err) { console.log(err); } }); callback(null, hair); }
步驟六:運(yùn)行爬蟲(chóng)程序
輸入node hz.js命令運(yùn)行爬蟲(chóng)程序,效果圖如下:
運(yùn)行成功后,發(fā)型師基本信息以html文件的形式存儲(chǔ)在data文件夾中,發(fā)型師頭像圖片存儲(chǔ)在image文件夾下。
到此,關(guān)于“node.js簡(jiǎn)單爬蟲(chóng)的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。