使用nodejs?spider爬取圖片及數(shù)據(jù)實現(xiàn)
nodejs如何爬取數(shù)據(jù)+圖片
nodejs爬取數(shù)據(jù)
當我們在做一些網(wǎng)站的時候,就需要用到一些數(shù)據(jù),但是網(wǎng)上有,一點點的復制又比較麻煩,這是我們的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)建服務
下面我們創(chuàng)建服務,用來接收數(shù)據(jù)和數(shù)據(jù)本地存儲
//創(chuàng)建服務 var strHtml = ""; var results = []; http.get(news,(res)=>{ //觸發(fā)接收事件data res.on("data",(chunk)=>{ //接收數(shù)據(jù),將數(shù)據(jù)一點點的追加到?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)建服務 http.get(imgurl,(res)=>{ //觸發(fā)接收事件data var imageData = ""; res.on("data",(chunk)=>{ //接收數(shù)據(jù),將數(shù)據(jù)一點點的追加到?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)建服務 https.get(imageUrl,(res)=>{ //二進制 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ù)的詳細內(nèi)容,更多關(guān)于nodejs_spider爬取圖片+數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js中的async?和?await?關(guān)鍵字微任務和宏任務
這篇文章主要介紹了Node.js中的async和await關(guān)鍵字微任務和宏任務,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07詳解PNPM?Monorepo依賴項管理功能模擬實現(xiàn)
這篇文章主要介紹了PNPM?Monorepo依賴項管理功能模擬實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03參考?EventEmitter實現(xiàn)一個簡單的訂閱發(fā)布功能函數(shù)
這篇文章主要為大家介紹了參考?EventEmitter實現(xiàn)一個簡單的訂閱發(fā)布功能函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02