nodejs写一个简单的爬虫

1.新建一个目录,执行:

npm init

执行命令后一直回车即可,就会发现package.json文件已经创建好了,然后 安装cheerio依赖:

npm install cheerio

cheerio是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对DOM进行操作的地方 。

具体代码:

// 请求 url - > html(信息)  -> 解析html
const https = require('https');
const cheerio = require('cheerio');
const fs = require('fs');

let pageUrls=[]
for(var i=0 ; i<= 10 ; i++){
  pageUrls.push(`https://movie.douban.com/top250?start=${i*25}&filter=`);
}

pageUrls.forEach((item,index)=>{
  https.get(item,function(res){
      // 分段返回的 自己拼接
      let html = '';
      // 有数据产生的时候 拼接
      res.on('data',function(chunk){
          html += chunk;
      })
      // 拼接完成
      res.on('end',function(){
          // console.log(html);
          const $ = cheerio.load(html);
          let allFilms = [];
          $('li .item').each(function(){
              // this 循环时 指向当前这个电影
              // 当前这个电影下面的title
              // 相当于this.querySelector 
              const title = $('.title', this).text();
              const star = $('.rating_num',this).text();
              const pic = $('.pic img',this).attr('src');
              // console.log(title,star,pic);
              // 存 数据库 
              // 没有数据库存成一个json文件 fs
              allFilms.push({
                  title,star,pic
              })          
          })
          // 把数组写入json里面
          fs.writeFile('./films.json', JSON.stringify(allFilms),function(err){
              if(!err){
                  console.log('文件写入完毕');
              }
          })   
          // 图片下载一下
          downloadImage(index,allFilms);
      })
  })
})

function downloadImage(index,allFilms) {
    for(let i=0; i<allFilms.length; i++){
        let picUrl = allFilms[i].pic;
        // 请求 -> 拿到内容      
        https.get(picUrl,function(res){
            res.setEncoding('binary');
            let str = '';
            res.on('data',function(chunk){
                str += chunk;
            })
            res.on('end',function(){
                fs.writeFile(`./images/${index+1}_${i+1}.png`,str,'binary',function(err){
                    if(!err){
                        console.log(`第${index+1}页,第${i+1}张图片下载成功`);
                    }
                })
            })
        })
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值