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