zoukankan      html  css  js  c++  java
  • 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。。。。。
  • 相关阅读:
    ng2-bootstrap的modal嵌套时无法滚动的情况
    oracle自动补0
    webservice 从客户端中检测到有潜在危险的 Request.Form 值
    树莓派花生壳
    ubuntu E: Could not get lock /var/lib/dpkg/lock
    树莓派配置静态ip
    解决PL/SQL查询结果乱码的问题
    批处理脚本命令行方式关闭Windows服务
    最简单的分享到微博代码
    Select的onchange事件
  • 原文地址:https://www.cnblogs.com/amiezhang/p/8047933.html
Copyright © 2011-2022 走看看