• Node爬虫:利用Node.js爬取网页图片的实用指南


    在互联网时代,图片是信息传递和展示的重要组成部分,而提取网页中的图片数据对于一些项目和需求来说尤为重要。本文将详细介绍如何使用Node.js编写爬虫程序,实现网页图片的批量爬取,帮助您轻松获得所需的图片数据,并揭示一些实用技巧和注意事项。
    一、准备工作

    1. 安装Node.js:确保您的电脑上已经安装了Node.js,您可以从官网(https://nodejs.org/)下载最新版本并进行安装。
    2. 创建项目目录:在本地创建一个新的文件夹作为项目目录,用于存放爬虫程序和爬取的图片。
    3. 初始化项目:打开命令行工具,进入项目目录,并执行以下命令初始化项目:
      npm init -y
      
      • 1
    4. 安装相关依赖:在项目目录下执行以下命令,安装需要的依赖包:
      npm install axios cheerio fs path
      
      • 1

    二、实现爬虫程序

    1. 导入依赖:
      在项目根目录下新建一个crawler.js文件,并在文件头部导入需要的依赖:
      const axios = require('axios');
      const cheerio = require('cheerio');
      const fs = require('fs');
      const path = require('path');
      
      • 1
      • 2
      • 3
      • 4
    2. 发起HTTP请求:
      编写一个fetchPage函数,用于发起HTTP请求并获取网页内容:
      async function fetchPage(url) {
        try {
          const response = await axios.get(url);
          return response.data;
        } catch (error) {
          console.error(error);
          throw new Error('Failed to fetch the page');
        }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    3. 解析网页:
      利用cheerio库来解析网页内容,提取其中的图片链接:
      function extractImageUrls(html) {
        const $ = cheerio.load(html);
        const imageUrls = [];
        $('img').each((index, element) => {
          const src = $(element).attr('src');
          // 对图片链接进行处理,补全相对路径等
          const imageUrl = new URL(src, 'http://example.com').href;
          imageUrls.push(imageUrl);
        });
        return imageUrls;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    4. 下载图片:
      编写一个downloadImage函数,用于下载图片到本地:
      async function downloadImage(url, savePath) {
        try {
          const response = await axios.get(url, { responseType: 'stream' });
          const filePath = path.join(savePath, path.basename(url));
          const writer = fs.createWriteStream(filePath);
          response.data.pipe(writer);
          return new Promise((resolve, reject) => {
            writer.on('finish', resolve);
            writer.on('error', reject);
          });
        } catch (error) {
          console.error(error);
          throw new Error('Failed to download the image');
        }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    5. 组合函数:
      编写一个主函数,将上述函数组合起来,实现图片的批量爬取:
      async function main() {
        const url = 'http://example.com'; // 替换为需要爬取的网页URL
        const savePath = path.join(__dirname, 'images');
       try {
          const html = await fetchPage(url);
          const imageUrls = extractImageUrls(html);
          fs.mkdirSync(savePath, { recursive: true });
          for (const imageUrl of imageUrls) {
            await downloadImage(imageUrl, savePath);
            console.log('Downloaded:', imageUrl);
          }
        } catch (error) {
          console.error(error);
        }
      }
      main();
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

    三、运行程序与注意事项

    1. 运行程序:
      打开命令行工具,进入项目目录,执行以下命令来运行爬虫程序:
      node crawler.js
      
      • 1
    2. 注意事项:
      • 爬虫程序的运行速度要适度,不要给目标网站造成过大的请求压力,遵守相关规定并尊重网站的服务器资源。
      • 爬取他人网站图片时,要遵守版权相关法律法规,谨慎使用和传播获得的图片。
      • 添加适当的错误处理机制,避免因网络故障或其他异常情况导致程序中断。
        通过运用axios库发起HTTP请求、cheerio库解析网页内容,并结合fspath模块实现图片的下载,您可以轻松地获取所需的图片数据。。希望本文的内容能够帮助您在实际项目中应用爬虫技术,提升您的工作效率和数据采集能力。
  • 相关阅读:
    微信支付v3接口的 官方 Java SDK
    Collection.sort首字母排序
    原创连载程序员面试文章:漫谈计算机网络:数据链路层 ----- 数据链路路在何方? --从点对点数据传输 到 "广泛撒网,重点捕获"的局域网
    产品经理简要介绍主流电商平台商品API接口的重要应用价值
    01 MongoDB的概述、应用场景、下载方式、连接方式和发展历史等
    2023 年 Android 毕业设计选题推荐,200 道 Android 毕业设计题目,避免踩坑
    Mysql高级篇学习总结7:Mysql数据结构-Hash索引、AVL树、B树、B+树的对比
    聊聊设计模式——命令模式
    Hi,你有一份Code Review攻略待查收
    第二次修有关路基和隧道的CASIO 5800P 万能曲线计算程序可以正反标
  • 原文地址:https://blog.csdn.net/D0126_/article/details/133267727