web-image-crawler
Version:
111 lines (91 loc) • 3.79 kB
JavaScript
const { Command } = require('commander');
const crawlImages = require('../index');
const fs = require('fs').promises;
const path = require('path');
const { version } = require('../package.json');
const program = new Command();
program
.name('image-crawler')
.description('强大的图片爬虫工具 - 一键下载网站所有图片')
.version(version);
// 主命令 - 超级简化版本
program
.argument('<url>', '网站URL')
.argument('[output-dir]', '图片保存目录', './images')
.option('-d, --depth <number>', '爬取深度', '4')
.option('--screenshot', '同时保存页面截图')
.option('--no-headless', '显示浏览器窗口(调试用)')
.option('-q, --quiet', '静默模式,减少输出信息')
.action(async (url, outputDir, options) => {
const startTime = Date.now();
if (!options.quiet) {
console.log('🚀 启动图片爬虫');
console.log(`📋 目标网站: ${url}`);
console.log(`📁 保存目录: ${outputDir}`);
console.log(`📊 爬取深度: ${options.depth}`);
if (options.screenshot) {
console.log('📸 页面截图: 启用');
}
console.log('');
}
const crawlerOptions = {
// 核心设置
maxDepth: parseInt(options.depth),
outputDir: outputDir,
outputFile: 'crawler-report.json',
// 固定的最佳实践设置
downloadImages: true, // 默认下载图片
maxConcurrent: 4, // 合理的并发数
timeout: 30000, // 30秒超时
headless: options.headless, // 默认无头模式
outputFormat: 'json', // JSON报告格式
// 图片相关设置
captureScreenshots: options.screenshot || false,
waitForImages: true, // 等待图片加载
detectLazyLoad: true, // 检测懒加载
includeBackgrounds: true, // 包含背景图片
includeHiddenImages: false, // 不包含隐藏图片
excludeDataUri: false, // 包含Base64图片
minSize: 0, // 不限制文件大小
imageFilter: null // 不过滤文件类型
};
try {
const result = await crawlImages(url, crawlerOptions);
const endTime = Date.now();
const duration = ((endTime - startTime) / 1000).toFixed(2);
if (!options.quiet) {
console.log(`\n🎉 爬取完成!耗时 ${duration} 秒`);
console.log(`✨ 成功下载 ${result.downloadedImages?.length || 0} 个图片`);
if (result.failedDownloads?.length > 0) {
console.log(`⚠️ 下载失败 ${result.failedDownloads.length} 个图片`);
}
if (result.screenshots?.length > 0) {
console.log(`📸 保存截图 ${result.screenshots.length} 个`);
}
const stats = result.stats || {};
if (stats.totalSize) {
console.log(`💾 总大小: ${(stats.totalSize / 1024 / 1024).toFixed(2)} MB`);
}
console.log(`📂 文件保存在: ${path.resolve(outputDir)}`);
console.log(`📄 详细报告: ${path.resolve(outputDir, 'crawler-report.json')}`);
}
} catch (error) {
console.error('❌ 爬取失败:', error.message);
if (process.env.DEBUG) {
console.error(error.stack);
}
process.exit(1);
}
});
// 帮助信息
program.addHelpText('afterAll', `
使用示例:
基本使用 (推荐):
image-crawler https://example.com my-pics # 下载到 ./my-pics
注意: 默认包含所有类型图片(包括Base64),深度为4层,使用无头浏览器模式
`);
program.parse(process.argv);
if (!process.argv.slice(2).length) {
program.outputHelp();
}