node.js爬虫:爬取网页图片

本文由清尘发表于2019-09-18 11:43最后修改于2020-05-26属于Node.js分类

TIM截图20191220112637

目录结构:

img文件夹用来存储图片文件。
node_modules文件夹是模块默认的保存位置。
index.js文件是整个项目的入口文件。
config.js文件是配置文件,用来放置网页地址和图片文件夹的路径。这样做的目的是使整个项目的可拓展性增强。
analyze.js文件用来存储分析DOM的方法。
package.json文件是包的描述文件。

整体的思路是通过第三方模块request请求网页地址,从而得到整个网页的DOM结构,根据DOM结构利用cheerio模块分析出图片文件的地址,再次请求这个地址,最后将得到的图片数据储存在本地。

安装模块

cnpm install request cheerio --save

cheerio模块可以使开发者像jQuery一样操作DOM。这里得到了请求网页中每一张图片文件的地址。可以通过更多的DOM分析过滤部分不需要的图片,留下自己最想要的图片。

通过分析DOM结构得到图片地址后,利用request再次发送请求,将请求得到的数据写入本地即可

config.js

const url = 'https://movie.douban.com/';
const path = require('path');
const imgDir = path.join(__dirname,'img');

module.exports = {
  url,
  imgDir
}

analyze.js

const cheerio = require('cheerio');

function findImg(dom,callback){
  let $ = cheerio.load(dom);
  $('.poster img').each(function(i,ele){
    let imgSrc = $(this).attr('src');
    callback(imgSrc,i);
  })
}

module.exports = {
  findImg
}

index.js

const fs = require('fs');
const request = require('request');
const path = require('path');
const config = require('./config');
const analyze = require('./analyze');

function start(){
  request(config.url,function(err,res,body){
    console.log('start');
    if(!err && res){
      console.log('start');
      analyze.findImg(body,downLoad);
    }
  })
}

function downLoad(imgUrl,i){
  let ext = imgUrl.split('.').pop();
  request(imgUrl).pipe(fs.createWriteStream(path.join(config.imgDir,i+'.'+ext),{
    'encoding':'utf8'
  }))
  console.log(i);
}

start();

运行程序即可下载对应的图片