使用nodejs?spider爬取圖片及數(shù)據(jù)實(shí)現(xiàn)
nodejs如何爬取數(shù)據(jù)+圖片
nodejs爬取數(shù)據(jù)
當(dāng)我們?cè)谧鲆恍┚W(wǎng)站的時(shí)候,就需要用到一些數(shù)據(jù),但是網(wǎng)上有,一點(diǎn)點(diǎn)的復(fù)制又比較麻煩,這是我們的nodejs就可以幫我們完成想要的數(shù)據(jù)
廢話就不多說(shuō)了,我直接上你們想要的
今天工作不是太忙就爬取了一個(gè)天氣的網(wǎng)站
效果圖
核心模塊
首先我們需要引入一些需要的核心模塊
//引入核心模塊 var http = require("http"); var fs = require("fs"); var cheerio = require("cheerio");
接下來(lái)我們需要想要爬取的網(wǎng)站的網(wǎng)址
const news = "http://www.weather.com.cn/weather/101010100.shtml";
創(chuàng)建服務(wù)
下面我們創(chuàng)建服務(wù),用來(lái)接收數(shù)據(jù)和數(shù)據(jù)本地存儲(chǔ)
//創(chuàng)建服務(wù) var strHtml = ""; var results = []; http.get(news,(res)=>{ //觸發(fā)接收事件data res.on("data",(chunk)=>{ //接收數(shù)據(jù),將數(shù)據(jù)一點(diǎn)點(diǎn)的追加到?jīng)]我們定義的空字符串中 strHtml+=chunk; }); //觸發(fā)接收完成時(shí)間end res.on("end",()=>{ //cheerio類似于jQuery我們?cè)谟盟氨仨気d入文檔用(load方法) var $ = cheerio.load(strHtml); var menew = []; //遍歷查出來(lái)的文本數(shù)據(jù) $("#7d li").each((index,item)=>{ //定義一個(gè)空數(shù)組,將數(shù)據(jù)內(nèi)容存在里面 menew.push({id:index,text:$(item).text()}); }); //轉(zhuǎn)換JSON字符串 var res = JSON.stringify(menew); //儲(chǔ)存到本地 fs.writeFile("./data1.json",res,(err)=>{ if(!err) console.log("成功寫入"); }) }); });
nodejs爬取圖片
這是前幾天爬取的百度圖片首頁(yè)的幾張圖
效果圖
核心模塊
首先我們也需要引入一些需要的核心模塊
//引入核心模塊 var http = require("http"); var https = require("https"); var fs = require("fs"); var cheerio = require("cheerio");
接下來(lái)我們需要想要爬取的網(wǎng)站的網(wǎng)址
const news = "http://image.baidu.com/";
首先我們需要將圖片的URL地址獲取下來(lái)
//創(chuàng)建服務(wù) http.get(imgurl,(res)=>{ //觸發(fā)接收事件data var imageData = ""; res.on("data",(chunk)=>{ //接收數(shù)據(jù),將數(shù)據(jù)一點(diǎn)點(diǎn)的追加到?jīng)]我們定義的空字符串中 imageData+=chunk; }); //觸發(fā)接收完成時(shí)間end res.on("end",()=>{ //cheerio類似于jQuery我們?cè)谟盟氨仨気d入文檔用(load方法) var $ = cheerio.load(imageData); var ImgData = []; //遍歷查出來(lái)的文本數(shù)據(jù) $(".img_pic_wrap_layer img").each((index,item)=>{ //定義一個(gè)空數(shù)組,將數(shù)據(jù)內(nèi)容存在里面 ImgData.push($(item).attr("src")); }); //循環(huán)調(diào)用圖片函數(shù) for(var i =0 ; i < ImgData.length ; i ++){ saveImage(ImgData[i]); } }); });
封裝函數(shù)
然后我們要根據(jù)圖片URL地址保存成圖片,我將它封裝了一個(gè)函數(shù)
//封裝圖片函數(shù) function saveImage(imageUrl){ //創(chuàng)建服務(wù) https.get(imageUrl,(res)=>{ //二進(jìn)制 res.setEncoding("binary"); var imageData=""; //將圖片加載到內(nèi)存中 res.on("data",(shuju)=>{ imageData+=shuju; }); //加載完保存圖片 res.on("end",()=>{ //創(chuàng)建文件夾,如果有擇不創(chuàng)建 if(!fs.existsSync("./img")){ fs.mkdirSync("./img"); }; //保存圖片 fs.writeFile("img/"+Math.random()+'.png',imageData,"binary",(err)=>{ if(err) throw err; console.log("保存成功!??!") }) }) }) }
不是太懂的可以去GitHub上面看源碼
以上就是nodejs_spider爬取圖片+數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于nodejs_spider爬取圖片+數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js中的async?和?await?關(guān)鍵字微任務(wù)和宏任務(wù)
這篇文章主要介紹了Node.js中的async和await關(guān)鍵字微任務(wù)和宏任務(wù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07詳解PNPM?Monorepo依賴項(xiàng)管理功能模擬實(shí)現(xiàn)
這篇文章主要介紹了PNPM?Monorepo依賴項(xiàng)管理功能模擬實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03詳解如何在NodeJS應(yīng)用程序中處理多個(gè)API請(qǐng)求
NodeJS默認(rèn)是異步的,這意味著它已經(jīng)能夠同時(shí)處理多個(gè)請(qǐng)求,但它只適用于I/O操作,如HTTP請(qǐng)求、文件系統(tǒng)操作、數(shù)據(jù)庫(kù)查詢、實(shí)時(shí)聊天應(yīng)用等,在處理CPU密集型任務(wù)時(shí),可能需要很長(zhǎng)時(shí)間,這就是為什么NodeJS提供了一些我們將在下面介紹的特定包2023-12-12Node.js中DNS模塊學(xué)習(xí)總結(jié)
本篇文章給大家詳細(xì)介紹了Node.js中DNS模塊的相關(guān)知識(shí)點(diǎn),以及相關(guān)的實(shí)例代碼做了分享,有興趣的朋友參考下。2018-02-02參考?EventEmitter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的訂閱發(fā)布功能函數(shù)
這篇文章主要為大家介紹了參考?EventEmitter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的訂閱發(fā)布功能函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02node.js突破nginx防盜鏈機(jī)制,下載圖片案例分析
這篇文章主要介紹了node.js突破nginx防盜鏈機(jī)制,下載圖片的方法,結(jié)合具體案例形式分析了防盜鏈的相關(guān)原理與node.js使用axios庫(kù)下載防盜鏈圖片的相關(guān)操作技巧,需要的朋友可以參考下2023-04-04