如何使用nodejs模块使用xpath提取html内容。

问题描述 投票:2回答:1

我正在寻找使用xpath的html内容提取器,我看到了各种nodejs模块,如

jsdom, htmlparser2, xpath, cheerio。

我发现cheerio在使用class、id、tags等获取数据方面比较好,但我无法通过指定xpath获取数据,通过使用xpath nodejs模块,我可以使用xpath获取较小html的数据,但对于较长的html,它给出了不同类型的错误,如

未找到实体。  @#[行:120,列:9],未关闭的xml属性 @#[行:1,列:877]

注:我没有权限对html进行任何形式的修改。

例如:如果我的html是

<html>
<body>

<div>

    <ul id="fruits">
        <li class="apple">Apple</li>
        <li class="orange">Orange</li>
        <li class="pear">Pear</li>
    </ul>

</div>

</body>


</html>

如果我使用这个,并给出这个xpath //*[@id="fruits"]/li[2] 使用xpath nodejs模块来查找元素,我没有得到任何错误,得到的结果是------。橙色 使用xpath nodejs模块,但如果我使用这个页面的html。http:/www.infotaxi.orgindia_taxiahmedabad_taxi.htm

(相当长),并使用xpath访问这部分文本

//*[@id="navlistmeniu"]/li[3]/a/b, 

我收到错误信息

未找到实体。  @#[line:120,col:9]

使用Cheerio,我可以使用class,id,tags等提取数据,而不是使用xpath提取数据

请大家帮忙?

html node.js xpath cheerio
1个回答
1
投票

我想这就是你的答案 xpath-html,自己测试一下。

const xpath = require("xpath-html");
const node = xpath.fromPageSource(html).findElement("//*[contains(text(), 'with love')]");
© www.soinside.com 2019 - 2024. All rights reserved.