nodejs+express 爬取网络图片并保存本地
所用到的node模版及依赖报
- express
- superagent --- superagent 是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下.
- superagent-charset 作用:nodejs使用superagent爬取网站内容中文乱码
- cheerio node版jquery 用法同jquery
- fs node内置模版 用于保存图片于本地
项目创建
- 创建目录 mkdir reptile
- cd reptile
- npm init 生成package.json
- npm i express superagent superagent-charset cheerio --save
引入模块
const express = require('express');
const superagent = require('superagent');
const charset = require('superagent-charset');
const cheerio = require('cheerio');
const fs = require('fs');
复制代码
列表的图片都在li内的img标签内 通过cheerio 我们能获取到元素假如我们要爬取 www.nanrentu.cc/sgtp/ 链接的图片 首先先分析此页面的结构
$('.wrap .h-sgtp-list .h-sgtp-box-m .h-piclist li')
复制代码
下面直接看源码
const express = require('express');
const superagent = require('superagent');
const charset = require('superagent-charset');
const cheerio = require('cheerio');
const fs = require('fs');
charset(superagent);
//爬取的链接 https://www.nanrentu.cc/sgtp/
const baseUrl = 'https://www.nanrentu.cc/sgtp/';
const app = express();
app.get('/', (req, res) => {
//设置请求头
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Access-Control-Allow-Headers', 'Content-Type');
superagent.get(baseUrl)
.charset('utf-8')
.end((err, data) => {
if (err) {
console.log(`请求错误:${err}`);
res.json({ code: 400, msg: err });
return;
}
const $ = cheerio.load(data.text);
const item = [];
$('.wrap .h-sgtp-list .h-sgtp-box-m .h-piclist li').each((index, element) => {
const $dom = $(element).find('img');
const imgSrc = $dom.attr('src');
item.push({
imgSrc: imgSrc
})
superagent.get(imgSrc).pipe(fs.createWriteStream(`./image/${index}.png`));
})
res.json({ code: 200, data: item });
})
})
app.listen(3333, () => {
console.log('启动成功:localhost:3333');
})
复制代码
这样我们就爬取了很多帅哥的图片在我们当前项目目录的image文件夹下面