【问题标题】:I want to parse html content/ text using htmlparser2, nodejs我想使用 htmlparser2、nodejs 解析 html 内容/文本
【发布时间】:2017-04-20 07:06:21
【问题描述】:
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 文件格式为 Format 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 的内容,而不能读取格式 1 的内容

有人可以帮帮我吗?

【问题讨论】:

  • 哇,你能展开嵌套的三元运算符吗?这是完全不可读的代码,请使用常规的if/else
  • 此外,还有一个名为 Cheerio 的 HTML 解析器,它是 htmlparser2 的包装器,它还支持用于选择特定节点的类 jQuery 语法。你会发现比使用 htmlparser2 的基本 DOM 方法更容易处理

标签: javascript node.js html-parsing


【解决方案1】:

正如Tomalak 建议的那样,cheerio 可以解决您的问题。我写了一个模块,可以解决你的问题。我用cheerio。由于它是一段代码,因此您不会浪费时间。你可以参考我的answer来查看。我解释了代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 2021-01-24
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多