Node.js Spider 实现网页数据与图片批量爬取实战

作者:星河

时间:2026-10-30

浏览:551

本文介绍如何使用 Node.js 结合 Spider 模块、Cheerio 解析 HTML 以及 HTTP 请求,实现网页文本数据与图片的批量爬取。通过封装核心函数,演示如何获取天气网站结构化数据并保存为 JSON,以及抓取百度图片首页链接并下载保存至本地文件夹,提供完整代码逻辑与实现思路。

文章目录

Node.js 如何爬取数据与图片

Node.js 爬取数据的方法

在开发网站过程中,往往需要获取特定数据。如果手动从网上复制粘贴,效率较低且繁琐。利用 Node.js 编写爬虫脚本,可以自动化完成所需数据的采集工作。

此处省略背景介绍,直接展示核心实现代码。

本次示例选取了一个天气查询网站进行数据爬取测试。

运行效果如下所示。

Node.js 如何爬取数据与图片

核心依赖模块

首先,需要引入项目所需的核心 Node.js 模块。

//引入核心模块
var http = require("http");
var fs = require("fs");
var cheerio = require("cheerio");

接着,指定目标爬取网站的 URL 地址。

const news = "http://www.weather.com.cn/weather/101010100.shtml";

创建 HTTP 服务

随后建立 HTTP 服务,用于接收网络响应数据,并将处理后的结果存储到本地文件系统。

//创建服务
var strHtml = "";
var results = [];
http.get(news,(res)=>{
    //触发接收事件data
    res.on("data",(chunk)=>{
        //接收数据,将数据一点点的追加到没我们定义的空字符串中
        strHtml+=chunk;
    });
    //触发接收完成时间end
    res.on("end",()=>{
        //cheerio类似于jQuery我们在用他之前必须载入文档用(load方法)
        var $ = cheerio.load(strHtml);
        var menew = [];
        //遍历查出来的文本数据
        $("#7d li").each((index,item)=>{
            //定义一个空数组,将数据内容存在里面
            menew.push({id:index,text:$(item).text()});
        });
        //转换JSON字符串
      var res = JSON.stringify(menew);
      //储存到本地
        fs.writeFile("./data1.json",res,(err)=>{
            if(!err) console.log("成功写入");
        })
    });
});

Node.js 爬取图片的实现

此前曾通过该方法抓取了百度图片首页的部分图片。

图片爬取效果展示。

Node.js 如何爬取数据与图片

核心依赖模块

同样,首先需要引入必要的核心模块以支持网络请求与文件操作。

//引入核心模块
var http = require("http");
var https = require("https");
var fs = require("fs");
var cheerio = require("cheerio");

接下来,设定需要爬取图片的目标网站地址。

const news = "http://image.baidu.com/";

首要步骤是解析网页,提取出所有图片的 URL 地址。

//创建服务
http.get(imgurl,(res)=>{
    //触发接收事件data
    var imageData = "";
    res.on("data",(chunk)=>{
        //接收数据,将数据一点点的追加到没我们定义的空字符串中
        imageData+=chunk;
    });
    //触发接收完成时间end
    res.on("end",()=>{
        //cheerio类似于jQuery我们在用他之前必须载入文档用(load方法)
        var $ = cheerio.load(imageData);
        var ImgData = [];
        //遍历查出来的文本数据
        $(".img_pic_wrap_layer img").each((index,item)=>{ 
            //定义一个空数组,将数据内容存在里面 
            ImgData.push($(item).attr("src"));
        });
        //循环调用图片函数
        for(var i =0 ; i < ImgData.length ; i ++){
            saveImage(ImgData[i]);
        }
    });
});

封装保存图片函数

根据获取到的图片 URL,编写并封装一个专用函数,用于将图片二进制数据保存为本地文件。

//封装图片函数
function saveImage(imageUrl){
    //创建服务
    https.get(imageUrl,(res)=>{
        //二进制
        res.setEncoding("binary");
        var imageData="";
        //将图片加载到内存中
        res.on("data",(shuju)=>{
            imageData+=shuju;
        });
        //加载完保存图片
        res.on("end",()=>{
            //创建文件夹,如果有择不创建
            if(!fs.existsSync("./img")){
                fs.mkdirSync("./img");
            };
            //保存图片
            fs.writeFile("img/"+Math.random()+'.png',imageData,"binary",(err)=>{
                if(err) throw err;
                console.log("保存成功!!!")
            })
        })
    })
}

若对代码逻辑存在疑问,可前往 GitHub 仓库查看完整源码。

源码获取地址

以上即为使用 Node.js Spider 爬取图片与数据的详细实现过程,更多相关技术资料请参阅本站其他文章。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章