• 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。。。。。
  • 相关阅读:
    Java注解入门
    两种求素数
    几个经典的递归小程序
    Java8新特性——接口的默认方法和类方法
    SSH框架总结
    初识SSH框架
    Mybatis中DAO层接口没有写实现类,Mapper中的方法和DAO接口方法是怎么绑定到一起的
    使用SQL查询所有数据库名和表名
    mybatis中#{}和${}的区别
    SOCKET, TCP/UDP, HTTP, FTP 浅析
  • 原文地址:https://www.cnblogs.com/amiezhang/p/8047933.html
Copyright © 2020-2023  润新知