nodejs+express 爬取网络图片并保存本地

nodejs+express 爬取网络图片并保存本地

所用到的node模版及依赖报

  • express
  • superagent --- superagent 是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下.
  • superagent-charset 作用:nodejs使用superagent爬取网站内容中文乱码
  • cheerio node版jquery 用法同jquery
  • fs node内置模版 用于保存图片于本地

项目创建

  1. 创建目录 mkdir reptile
  2. cd reptile
  3. npm init 生成package.json
  4. 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');
复制代码

假如我们要爬取 www.nanrentu.cc/sgtp/ 链接的图片 首先先分析此页面的结构

列表的图片都在li内的img标签内 通过cheerio 我们能获取到元素

$('.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文件夹下面

你可能感兴趣的:(nodejs+express 爬取网络图片并保存本地)