【发布时间】:2013-10-16 07:49:43
【问题描述】:
我有一个 HTML 响应。我需要解析它并生成一个 DOM 对象。生成 DOM 对象后,我需要在其中搜索特定字符串并获取它所在的 HTML 标记的完整层次结构。有没有可用的 NPM 包。
【问题讨论】:
标签: node.js dom html-parsing npm
我有一个 HTML 响应。我需要解析它并生成一个 DOM 对象。生成 DOM 对象后,我需要在其中搜索特定字符串并获取它所在的 HTML 标记的完整层次结构。有没有可用的 NPM 包。
【问题讨论】:
标签: node.js dom html-parsing npm
现在在 htmlparser2 中有一个更简单的 API:
var htmlparser = require("htmlparser2");
var dom = htmlparser.parseDOM("<html>your html string</html>");
console.log(dom);
【讨论】:
您有可以解析 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();
【讨论】:
手动解析 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'
【讨论】:
parseDOM 函数现在在 htmlparser2 包中被弃用。你现在可以使用parseDocument函数了。
const { parseDocument } = require("htmlparser2");
let dom = parseDocument(row_html);
console.log('DOM: ', dom);
【讨论】: