node爬虫入门

爬虫其实就是模仿浏览器访问页面,然后把页面保存起来备用。


 

爬虫的方法,直接上代码:

function getUrl(url,success,error){
  let urlObj = urlParser.parse(url);
  let mod = null;
 //判断用是哪个协议,对应用哪个模块
  if(urlObj.protocol=='http:'){
    mod = require('http');
  }else{
    mod = require('https');
  }
  let req = mod.request({
        hostname: urlObj.hostname,
        path: urlObj.path
      },res=>{
      //如果是200表示成功,则把buffer用数组存起来,end的时候发给success回调
      if(res.statusCode==200){
        let arr=[];
        res.on('data',buffer=>{
          arr.push(buffer);
        })
        res.on('end',_=>{
          let b = Buffer.concat(arr);
          success && success(b);
        })
      }
      // 如果是重定向,拿到重定向地址res.headers.location,递归自己
      else if(res.statusCode==301||res.statusCode==302){
        getUrl(res.headers['location'],success,error)
      }
      //其他则是出错了
      else{
        error && error(res.statusCode);
      }
  })
  req.end();
  req.on('error',err=>{
    error && error(err);
  })
}

上面的方法普通页面够用了,但是有些页面有些奇怪,例如天猫,编码是gbk,所以我们需要用把buffer进行gbk解码:

const gbk = require('gbk');
//把gbk Buffer解码并编码成utf8字符串
gbk.toString('utf-8',buffers)

获得html字符串后,我们通常的做法就是写正则来匹配,这样无疑是极其麻烦的,我们有一个node组件叫jsdom就让我们在node里面实现了获取dom的操作:

const jsdom = require('jsdom').JSDOM;

let document = (new jsdom(htmlStr)).window.document;

//之后可以用queryselector、getElementById。。。。。

 

转载于:https://www.cnblogs.com/amiezhang/p/8047933.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值