node.js爬虫批量下载图片
有些网页做过处理,直接重定向了,这里爬虫只不做处理的一些网页效果图代码// const http = require('http'); //如果是http协议用这个const http = require('https');const fs = require('fs');const request = require('request');const cheerio = require('che
·
有些网页做过处理,直接重定向了,这里爬虫只不做处理的一些网页
效果图
代码
// const http = require('http'); //如果是http协议用这个
const http = require('https');
const fs = require('fs');
const request = require('request');
const cheerio = require('cheerio');
let home = 'url';//某些图片可能是这样的www.xxx.com/image/111.png
let url = 'url';// 末尾不要/ 例如复制过来的百度 首页可能是 www.xxx.com/index.html所以加个home
getImgByZY(url);
function getImgByZY(url){
http.get(url, (res) => {
//数据过滤处理
const { statusCode } = res;
const contentType = res.headers['content-type'];
let err;
if(/^[45][0-9][0-9]$/.test(statusCode)){
err = new Error(`请求失败,状态码为:${statusCode}`);
// }else if(!/^image\/\*/.test(contentType)){
}else if(!/^text\/\html/.test(contentType)){
err = new Error(`请求类型错误,类型为${contentType}`);
}
//请求出错时清除缓存
if(err){
console.log(err);
console.log("出错啦");
res.resume();//清除请求缓存
return false;//结束请求
}
res.setEncoding('utf8');
//数据会分段接收 chunk 数据片段
let rawData = '';
res.on('data', (chunk) => {
console.log('数据传输中...');
rawData += chunk;
})
res.on('end', () => {
try {
let $ = cheerio.load(rawData);
getImgUrl($);
} catch (e) {
console.error(e.message);
}
})
}).on('error', (e) => {
console.error(`出现错误: ${e.message}`);
});
}
//获取图片路径
function getImgUrl($){
//图片标签下载
$('img').each((index,item)=>{
let url = $(item).attr('src');
let [realUrl,filename] = [formatUrl(url),getFilename(url)]
download(realUrl,filename);
});
}
//格式化路径
function formatUrl(url){
if(url.match('http')){
return url;
}else{
return home+url;
}
}
//获取文件名
function getFilename(url){
return url.substring(url.lastIndexOf('/')+1,url.length);
}
//执行下载
function download(url,filename){
if (!fs.existsSync('./image2')) {
fs.mkdirSync('./image2');
}
console.log(`下载${filename}中...`);
request(url).pipe(fs.createWriteStream(`./image2/${filename}`))
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)