1

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

4

4 回答 4

7

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

var htmlparser = require("htmlparser2");
var dom = htmlparser.parseDOM("<html>your html string</html>");
console.log(dom);
于 2015-02-22T20:46:08.760 回答
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();
于 2013-10-09T07:26:21.820 回答
1

手动解析 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'
于 2016-08-21T05:10:01.593 回答
0

parseDOM功能现在在htmlparser2包中已弃用。您现在可以使用parseDocument功能。

const { parseDocument } = require("htmlparser2");

let dom = parseDocument(row_html);
console.log('DOM: ', dom);
于 2021-04-26T23:29:08.260 回答