我想使用htmlparser2解析html内容/文本,nodejs

时间:2016-12-05 19:31:05

标签: javascript node.js html-parsing

fs.readFile(htmlPath, 'utf8', function(err, html) {
            var htmlparser = require("htmlparser2");
            var primary, secondary;
            var handler = new htmlparser.DomHandler(function(error, dom) {
                for (var i = 0; i < dom.length; i++) {
                    if (((dom[i].attribs !== undefined) ? dom[i].attribs.class === 'offer-wrapper' : false) && (dom[i].children[1] !== undefined ? dom[i].children[1].children[1] !== undefined : false)) {

                        if (dom[i].children[1].children[1] !== undefined ? (dom[i].children[1].children[1].name !== undefined ? (dom[i].children[1].children[1].name === 'p' && dom[i].children[1].children[1].children[0] !== undefined ? dom[i].children[1].children[1].children[0].data !== undefined : false) : false) : false) {
                            primary = dom[i].children[1].children[1].children[0].data.trim();
                        }
                    }
                    if ((dom[i].attribs !== undefined ? dom[i].attribs.class === 'promo-banner' : false) && (dom[i].children[1] !== undefined ? ((dom[i].children[1].name !== undefined && dom[i].children[1].children[0] !== undefined) ? (dom[i].children[1].name === 'p' && dom[i].children[1].children[0].data !== undefined) : false) : false)) {
                        secondary = dom[i].children[1].children[0].data.trim();
                    }
                }
            });
            var parser = new htmlparser.Parser(handler);
            parser.write(html);
            parser.end();
        });

HTML文件的格式为格式1

<div class=offer-wrapper>
  <div class=offer>
    <p>Content1</p>
  </div>
</div>
<div class=promo-banner>
  <p>Content 2</p>
</div>

或 格式2

<div class=promo-banner>
    <p>Content 2</p>
</div>

或 格式3

<div class=offer-wrapper>
  <div class=offer>
    <p>Content1</p>
  </div>
</div>
<div class=promo-banner>
</div>

当我尝试阅读HTML文件内容时,我只能阅读格式2和格式的内容。 3不是来自format1

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

根据Tomalak的建议,cheerio将解决您的问题。我已经编写了一个模块,可以解决您的问题。我使用了cheerio。既然是一段代码,您就不会浪费时间。您可以通过参考我的answer进行检查。我解释了代码。