我正在寻找使用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提取数据
请大家帮忙?
我想这就是你的答案 xpath-html
,自己测试一下。
const xpath = require("xpath-html");
const node = xpath.fromPageSource(html).findElement("//*[contains(text(), 'with love')]");