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

时间:2015-05-15 08:22:54

标签: html node.js xpath cheerio

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

  

jsdom,htmlparser2,xpath,cheerio

我发现cheerio更适合使用class,id,tags等获取数据但是我无法通过指定xpath来获取数据,并且通过使用xpath nodejs模块,我能够使用xpath获取更小的html数据,更长的html它给出了不同类型的错误,如

  

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

注意:我无权以任何方式更改html

e.g。如果我的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 nodejs模块给这个xpath //*[@id="fruits"]/li[2]找到元素,我没有收到任何错误,并使用xpath nodejs模块得到 Orange 的结果,但是如果我使用此页面的html http://www.infotaxi.org/india_taxi/ahmedabad_taxi.htm

(这是相当长的),并使用xpath

访问文本部分
//*[@id="navlistmeniu"]/li[3]/a/b, 

我收到错误

  

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

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

请帮忙????

1 个答案:

答案 0 :(得分:1)

我认为这是您的答案xpath-html,请自己进行测试:

const xpath = require("xpath-html");
const node = xpath.fromPageSource(html).findElement("//*[contains(text(), 'with love')]");