我有一个 HTML 响应。我需要解析它并生成一个 DOM 对象。生成 DOM 对象后,我需要在其中搜索特定字符串并获取它所在的 HTML 标记的完整层次结构。有没有可用的 NPM 包。
问问题
7191 次
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 回答