Node 批量抓取并下载站点图片

Node.js-spider-pictures

Node.js 批量抓取并下载站点图片和文章信息并保存在本地

目标网站:「ONE · 一个」

项目功能:批量下载该网站精美的轮播图和文章列表标题内容

一、启动项目

网速慢的话推荐用 cnpm 安装依赖

命令:

npm i npm start 二、配置文件

// 配置相关 module.exports = { originPath: 'xxx', // 请求地址 savePath: 'xxx' // 默认配置的存放路径,根据需要去修改(macOS 一般是 /Users/你的用户名/xxx) } 三、用到的主要模块

模块 作用
axios 获取页面数据
cheerio 操作 DOM 节点获取图片和图片名
Stream 创建读/写的数据流对象通过管道连接下载图片
writeFile 异步地将数据写入到一个文件,如果文件已存在则覆盖该文件

axios 相关代码:

// 获取页面数据 async getPage (url) { return { res: await axios.get(url) } }

cheerio 相关代码:

// 获取所有图片地址 getImageSrc(page) { let imageSrcArr = [] let $ = cheerio.load(page.res.data) let imageSrc = $('.carousel-inner') .find('img') .each((index, item) => { imageSrcArr.push(item.attribs.src) }) return imageSrcArr }

Stream 相关代码:

// 创建读取数据流对象 let { data: ReadStream } = await axios({ method: 'get', url: imageSrc, responseType: 'stream', headers }) // 创建写入数据流对象 let writeStream = fs.createWriteStream(filePath) // 通过管道下载数据流 ReadStream.pipe(writeStream)

writeFile 相关代码:

// 写文件到指定目录 fs.writeFile(`${config.saveDomData.savePath}/test.json`, JSON.stringify(articleData, null, 2), (error) => { if (error) { console.log(error) return false } console.log("数据保存成功!") }) } 四、说明 此项目仅用于个人学习,不用于任何商业用途,如果侵权,即刻删除!

版权声明:

1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。
2、网站不提供资料下载,如需下载请到原作者页面进行下载。