Node中的request模块与cheerio模块实现简单爬虫

node与第三方模块实现网站图片爬取

引入我们的主角模块:
const request=require('request')//没有request模块 需要先行控制台安装 npm i request
const cheerio=require('cheerio')//没有cheerio模块 需要先行控制台安装 npm i cheerio 
查看我们准备爬取的页面
获取页面dom
request('http://www.nipic.com/',{},function(err,res,body){//body是主页的HTML,{}为请求头
   var $=cheerio.load(body)
   // console.log(body)//body获取内容为字符串
   // console.log($('img'))//获取dom内的img标签
   //获取dom内全部的img src
   $('img').each(function(index,element){
      // console.log($(element).attr('src'))
      var imgPath = $(element).attr('src')
      requestImg(imgPath) //将图片地址传入封装的函数进行图片写入
  })  
})
方法1: fs模块写入图片
// 引入node自带模块
const http = require('http')
const url = require('url')
const path = require('path')
const fs = require('fs')
requestImg()函数的封装
var requestImg = function(imgPath){
   var imgUrl = url.parse(imgPath)
   var fileName = path.parse(imgUrl.path).base
   var imgRequest = http.request({
    protocol:'http:',
    host: imgUrl.host,
    port:80,
    method:'get',
    path:imgUrl.path,
    headers:{//request headers 加密可用
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
    }
   },function(res){
    var arr = []
    res.on('data',function(chunk){
        arr.push(chunk)
    })
    res.on('end',function(){
        fs.writeFile('./爬虫图片(进阶)' fileName,Buffer.concat(arr),function(){
            console.log(fileName,'保存成功')
         })
     })
 })
imgRequest.end()
}
效果展示

方法2: request模块写入图片
// 引入node自带模块
const url = require('url')
const path = require('path')
const fs = require('fs')
requestImg()函数封装的变化
var requestImg = function(imgPath){
   var imgUrl = url.parse(imgPath)
   var fileName = path.parse(imgUrl.path).name
   var writeStream = fs.createWriteStream(fileName '.png');
   var src = imgPath;
   var readStream = request(src)
   readStream.pipe(writeStream);
   readStream.on('end', function() {
       console.log('文件下载成功');
   });
   readStream.on('error', function() {
       console.log("错误信息:"   err)
   })
   writeStream.on("finish", function() {
       console.log("文件写入成功");
       writeStream.end();
   });
}
效果展示

--END--

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值