使用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)建服務(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ù)一點點的追加到?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ù)一點點的追加到?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)=>{
//二進制
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如何自定義實現(xiàn)一個EventEmitter
我們了解到,Node采用了事件驅(qū)動機制,而EventEmitter就是Node實現(xiàn)事件驅(qū)動的基礎(chǔ),本文主要介紹了node.js自定義實現(xiàn)EventEmitter,感興趣的可以了解一下2021-07-07
HTTP JSON接口模擬工具Interfake快速入門教程
這篇文章主要為大家介紹了HTTP JSON接口模擬工具Interfake快速入門教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
Restify中接入Socket.io報Error:Can’t set headers的錯誤解決
這篇文章主要給大家介紹了在Restify中接入Socket.io報Error:Can’t set headers的錯誤解決方法,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03
node.js實現(xiàn)pdf與圖片互轉(zhuǎn)代碼示例
因工作需求,記錄一次如何在Node中pdf與圖片互轉(zhuǎn)各種操作,這篇文章主要給大家介紹了關(guān)于node.js實現(xiàn)pdf與圖片互轉(zhuǎn)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-04-04
在Linux系統(tǒng)上升級Node.js遇到GLIBC依賴問題的多種解決方案
在現(xiàn)代 Web 開發(fā)和 DevOps 實踐中,Node.js 是一個不可或缺的工具,在升級 Node.js 版本時,尤其是在較舊的 Linux 系統(tǒng)上,可能會遇到一些依賴庫不兼容的問題,特別是與 GLIBC 和 GLIBCXX 相關(guān)的錯誤,本文將詳細介紹如何解決這個依賴問題,需要的朋友可以參考下2025-01-01

