溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Node爬蟲實(shí)踐

發(fā)布時(shí)間:2020-07-20 05:28:50 來(lái)源:網(wǎng)絡(luò) 閱讀:474 作者:wx5d1d7cf454d00 欄目:web開發(fā)

爬蟲的原理很好理解,就是在服務(wù)端請(qǐng)求另一個(gè)服務(wù)器的資源,前端有跨域問(wèn)題,而服務(wù)端沒有,這是天然優(yōu)勢(shì)。掌握node的前端可以為所欲為了。Node爬蟲實(shí)踐

1 首先,根據(jù)請(qǐng)求資源的協(xié)議選擇合適的模塊,比如csdn是https協(xié)議,就用https的方法取請(qǐng)求,之前沒有注意到這個(gè)問(wèn)題。

var?https?=?require('https');

2 用get方法請(qǐng)求需要抓去內(nèi)容的網(wǎng)頁(yè)地址,試過(guò)用request方法,沒有反應(yīng)。

?https.get('https://www.xxx.net',function(res){
????????......
?})

3 用cheerio模塊查找dom元素,抓取需要的內(nèi)容。cheerio是服務(wù)端的dom操作工具,以jquery為內(nèi)核。

var?cheerio?=?require('cheerio');
?????res.on('data',?(chunk)?=>?{
????????const?$?=?cheerio.load(chunk);
????????let?content=$('.company_list');
?????})

4 把圖片的絕對(duì)地址改成本地路徑,前端頁(yè)面無(wú)法直接訪問(wèn)跨域受保護(hù)圖片。

let?imgsrc=[];
content.find('img').each((index,e)=>{
????
????var?originsrc=e.attribs.src;
????e.attribs.src?='/images/'+e.attribs.src.split('?')[0].split('/').pop();
????imgsrc.push(originsrc);

})

5 最后一步,也是最重要的一步:把圖片保存在本地文件夾。試過(guò)fs.readFile 和fs.writeFile,保存下來(lái)的圖片受損打不開;試過(guò)直接get請(qǐng)求,返回的圖片都是0字節(jié)。正確的方法是用request方法,至于為什么?我也不清楚啊??赡苁莃inary二進(jìn)制的優(yōu)勢(shì),畢竟再怎么偽裝,所有數(shù)據(jù)本質(zhì)還是二進(jìn)制吧。


var?request?=?require('request');
imgsrc.forEach(item=>{

????var?filename?=?item.split('?')[0].split('/').pop();

????request({?url:?item,?encoding:?null?},?(err,?response,?body)?=>?{?
????????fs.writeFileSync('./public/images/'+filename,?body,?{?encoding:?'binary'?});
????})

})

到此為止,爬蟲的功能就結(jié)束了。Node爬蟲實(shí)踐


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI