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