【问题标题】:Get DOM object of input HTML using Node.js使用 Node.js 获取输入 HTML 的 DOM 对象
【发布时间】:2013-10-16 07:49:43
【问题描述】:

我有一个 HTML 响应。我需要解析它并生成一个 DOM 对象。生成 DOM 对象后,我需要在其中搜索特定字符串并获取它所在的 HTML 标记的完整层次结构。有没有可用的 NPM 包。

【问题讨论】:

    标签: node.js dom html-parsing npm


    【解决方案1】:

    现在在 htmlparser2 中有一个更简单的 API:

    var htmlparser = require("htmlparser2");
    var dom = htmlparser.parseDOM("<html>your html string</html>");
    console.log(dom);
    

    【讨论】:

    • htmlparser2 对新手来说似乎记录得很糟糕:(
    【解决方案2】:

    您有可以解析 HTML 流的 htmlparser2 包。您可以使用与 htmlparser2 本身捆绑在一起的 DomHandler 获取 DOM。请参阅那里给出的示例。例如

    var htmlparser = require("htmlparser2");
    var rawHtml = "<html>your html string</html>";
    var handler = new htmlparser.DomHandler(function (error, dom) {
            console.log(dom);
    });
    var parser = new htmlparser.Parser(handler);
    parser.write(rawHtml);
    parser.done();
    

    【讨论】:

      【解决方案3】:

      手动解析 DOM 对象是一项繁琐的工作。
      我想每个人都需要一个 Soup Select(soupselect 包)来解析复杂的 DOM 对象。
      soupselect 是处理 DOM 的绝佳软件包。 请参见以下示例:

      var htmlparser = require("htmlparser2");
      var select = require('soupselect').select;
      var handler = new htmlparser.DomHandler(function (error, dom) {
        if (error)
          console.log('error:', error);
        else {
          // selector reference:
          // http://www.w3schools.com/jquery/jquery_ref_selectors.asp
          var sel = select(dom, 'body p');
          console.log("text in the first <p>: '" + sel[0].children[0].data + "'");
        }
      });
      var parser = new htmlparser.Parser(handler);
      var rawHtml =
        "<html>"
        + "<head><title>My Title</title></head>"
        + "<body>"
        + "<p>"
        + "   Hello World"
        + "</p></body></html>";
      parser.parseComplete(rawHtml);
      

      输出:

      text in the first <p>: '   Hello World'
      

      【讨论】:

        【解决方案4】:

        parseDOM 函数现在在 htmlparser2 包中被弃用。你现在可以使用parseDocument函数了。

        const { parseDocument } = require("htmlparser2");
        
        let dom = parseDocument(row_html);
        console.log('DOM: ', dom);
        

        【讨论】:

          猜你喜欢
          • 2018-11-19
          • 2011-04-15
          • 1970-01-01
          • 2017-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多