????利用node實現(xiàn)爬蟲這里用到了三個主要模塊,其中https,fs是內(nèi)置模塊可以直接引入,cheerio是第三方模塊需要npm install cheerio --save 安裝后使用。
這里我介紹一個三個模塊的相應(yīng)用法
? ? 首先是https模塊,顧名思義是用于獲取https協(xié)議網(wǎng)址的相關(guān)內(nèi)容所需要用到的模塊,其中包含get,post兩中方法,在獲取數(shù)據(jù)時也有所不同,我使用的是get方法,https.get(url,(res)=>{})接收兩個參數(shù),第一個是要爬取的地址,第二個是回調(diào)函數(shù)用于獲取返回的數(shù)據(jù),res有兩個監(jiān)聽,res.on('data')是監(jiān)聽每一段數(shù)據(jù)流數(shù)據(jù)傳輸,接收參數(shù)就是每次傳輸?shù)?html)數(shù)據(jù),這個數(shù)據(jù)我們保存在一個字符串中,并將所有的數(shù)據(jù)進行拼接。之后會用到res.on('end')方法,表示數(shù)據(jù)傳輸已經(jīng)完成,這個時候就需要用到移入的第三方模塊cherrio。
? ? cherrio模塊中有一個.load方法,用來解析我們之前保存下的html字符串,解析后的html數(shù)據(jù)用類似于jQuery的方法來獲取相關(guān)的dom元素的信息,這邊我們要獲取的是img標(biāo)簽中的src的值,所以先遍歷出所有的img標(biāo)簽,獲取到所有的圖片地址。將獲取到的圖片地址信息再用https進行一次獲取到真正的圖片數(shù)據(jù)。這個時候就需要fs出場了
? ? fs文件模塊有很多種的用法,非常便于我們對nodejs文件進行一個快捷操作。這里我們只需要用到文件寫入功能。通過以上操作獲取到圖片的真實二進制數(shù)據(jù),fs.writeFile(保存路徑,二進制數(shù)據(jù),‘binary’,callback),將所有的請求到的圖片下載保存至本地。至此一個簡單的圖片獲取js就基本實現(xiàn),目前只寫了文件夾的處理,后續(xù)更新多文件的圖片下載。逆戰(zhàn)班加油
