怎么利用nodejs​爬取并下载一万多张图片

发布时间:2022-03-25 09:37:06 作者:小新
来源:亿速云 阅读:255

怎么利用Node.js爬取并下载一万多张图片

在当今互联网时代,图片数据是非常重要的一种资源。无论是做数据分析、机器学习,还是简单的图片收集,爬取并下载大量图片都是一个常见的需求。本文将介绍如何利用Node.js来爬取并下载一万多张图片。

1. 准备工作

在开始之前,我们需要确保已经安装了Node.js和npm(Node.js的包管理器)。如果还没有安装,可以从Node.js官网下载并安装。

接下来,我们需要安装一些必要的npm包:

npm install axios cheerio fs path

2. 爬取图片链接

首先,我们需要编写一个函数来爬取目标网页中的图片链接。假设我们要爬取的网页是一个图片库,每页包含多张图片。

const axios = require('axios');
const cheerio = require('cheerio');

async function fetchImageUrls(pageUrl) {
    try {
        const response = await axios.get(pageUrl);
        const $ = cheerio.load(response.data);
        const imageUrls = [];

        $('img').each((index, element) => {
            const imageUrl = $(element).attr('src');
            if (imageUrl) {
                imageUrls.push(imageUrl);
            }
        });

        return imageUrls;
    } catch (error) {
        console.error(`Error fetching image URLs from ${pageUrl}:`, error);
        return [];
    }
}

这个函数会从指定的网页URL中提取所有<img>标签的src属性,并将其存储在一个数组中返回。

3. 下载图片

接下来,我们需要编写一个函数来下载图片并保存到本地。

const fs = require('fs');
const path = require('path');
const axios = require('axios');

async function downloadImage(imageUrl, savePath) {
    try {
        const response = await axios({
            url: imageUrl,
            responseType: 'stream',
        });

        const writer = fs.createWriteStream(savePath);
        response.data.pipe(writer);

        return new Promise((resolve, reject) => {
            writer.on('finish', resolve);
            writer.on('error', reject);
        });
    } catch (error) {
        console.error(`Error downloading image from ${imageUrl}:`, error);
    }
}

这个函数会从指定的图片URL下载图片,并将其保存到指定的路径。

4. 批量下载图片

现在,我们可以将上述两个函数结合起来,批量下载一万多张图片。

const fs = require('fs');
const path = require('path');
const axios = require('axios');
const cheerio = require('cheerio');

async function downloadImagesFromPage(pageUrl, saveDir) {
    const imageUrls = await fetchImageUrls(pageUrl);

    if (!fs.existsSync(saveDir)) {
        fs.mkdirSync(saveDir, { recursive: true });
    }

    for (let i = 0; i < imageUrls.length; i++) {
        const imageUrl = imageUrls[i];
        const imageName = path.basename(imageUrl);
        const savePath = path.join(saveDir, imageName);

        console.log(`Downloading ${imageUrl} to ${savePath}...`);
        await downloadImage(imageUrl, savePath);
    }
}

async function downloadAllImages(baseUrl, totalPages, saveDir) {
    for (let page = 1; page <= totalPages; page++) {
        const pageUrl = `${baseUrl}?page=${page}`;
        console.log(`Fetching images from page ${page}...`);
        await downloadImagesFromPage(pageUrl, saveDir);
    }
}

// 示例:下载100页图片,每页100张
const baseUrl = 'https://example.com/images';
const totalPages = 100;
const saveDir = './images';

downloadAllImages(baseUrl, totalPages, saveDir)
    .then(() => console.log('All images downloaded successfully!'))
    .catch(error => console.error('Error downloading images:', error));

在这个示例中,我们假设目标网站有100页,每页包含100张图片。我们通过循环遍历每一页,提取图片链接并下载到本地。

5. 注意事项

6. 总结

通过本文的介绍,我们学习了如何利用Node.js爬取并下载大量图片。整个过程包括爬取图片链接、下载图片、批量处理等步骤。虽然本文的示例比较简单,但通过进一步的优化和扩展,可以应对更复杂的爬取任务。希望本文对你有所帮助!

推荐阅读:
  1. python爬取贴吧图片并下载
  2. python如何爬取电影并下载

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nodejs​

上一篇:jquery能不能判断img是否为空

下一篇:Python计算机组成是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》