使用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-12
Node.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-02
node.js突破nginx防盜鏈機(jī)制,下載圖片案例分析
這篇文章主要介紹了node.js突破nginx防盜鏈機(jī)制,下載圖片的方法,結(jié)合具體案例形式分析了防盜鏈的相關(guān)原理與node.js使用axios庫(kù)下載防盜鏈圖片的相關(guān)操作技巧,需要的朋友可以參考下2023-04-04

