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。。。。。
  • 相关阅读:
    C#文件操作与编程
    C# 中字符串转换成日期
    C#数据类型与数据库字段类型对应
    C# 知识点随手学习网站推荐
    Java -- 线程
    Java -- IO
    Java -- Swing 组件使用
    Java -- 乒乓球 乒乓弹球游戏
    Java -- AWT 画图,图像处理
    Java -- AWT 菜单建立, Menu, 右键菜单
  • 原文地址:https://www.cnblogs.com/amiezhang/p/8047933.html
Copyright © 2011-2022 走看看