您好,登录后才能下订单哦!
在当今互联网时代,图片数据是非常重要的一种资源。无论是做数据分析、机器学习,还是简单的图片收集,爬取并下载大量图片都是一个常见的需求。本文将介绍如何利用Node.js来爬取并下载一万多张图片。
在开始之前,我们需要确保已经安装了Node.js和npm(Node.js的包管理器)。如果还没有安装,可以从Node.js官网下载并安装。
接下来,我们需要安装一些必要的npm包:
npm install axios cheerio fs path
首先,我们需要编写一个函数来爬取目标网页中的图片链接。假设我们要爬取的网页是一个图片库,每页包含多张图片。
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
属性,并将其存储在一个数组中返回。
接下来,我们需要编写一个函数来下载图片并保存到本地。
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下载图片,并将其保存到指定的路径。
现在,我们可以将上述两个函数结合起来,批量下载一万多张图片。
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张图片。我们通过循环遍历每一页,提取图片链接并下载到本地。
通过本文的介绍,我们学习了如何利用Node.js爬取并下载大量图片。整个过程包括爬取图片链接、下载图片、批量处理等步骤。虽然本文的示例比较简单,但通过进一步的优化和扩展,可以应对更复杂的爬取任务。希望本文对你有所帮助!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。