Node.js上的HTML解析器


198

nodejs上有像Ruby的nokogiri这样的东西吗?我的意思是用户友好的HTML解析器。

我在Node.js模块页面上看到了一些解析器,但是找不到漂亮又新鲜的东西。


3
“友好”是什么意思?是否方便工作和选择节点,例如Nokogiri的XPath和CSS选择器支持?可以解析无效的“标签汤” HTML吗?
Phrogz

如果您熟悉jQuery,请考虑以下答案
Lucio Paiva 2015年

Answers:


446

如果要构建DOM,则可以使用jsdom

还有cheerio,它具有jQuery接口,并且比旧版本的jsdom快很多,尽管如今它们的性能相似。

您可能想看一下htmlparser2,它是一个流解析器,根据它的基准,它似乎比其他解析器快,并且默认情况下没有DOM。它也可以生成DOM,因为它还与创建DOM的处理程序捆绑在一起。这是cheerio使用的解析器。

parse5看起来也不错。它相当活跃(自本次更新以来的最后一次提交以来,是11天),符合WHATWG,并且在jsdomAngularPolymer中使用

如果要解析HTML以进行Web抓取,则可以使用YQL 1。有一个节点模块。如果您的HTML来自静态网站,我认为YQL是最好的解决方案,因为您依赖的是服务而不是代码和处理能力。尽管请注意,如果网站的robot.txt禁止该页面,则该按钮将无法使用,但YQL不能使用该页面。

如果您要抓取的网站是动态的,那么您应该使用无头浏览器,例如phantomjs。也看看casperjs,如果你正在考虑phantomjs。您可以使用SpookyJS从node控制casperjs

在phantomjs旁边有zombiejs。与无法嵌入到nodejs中的phantomjs不同,zombiejs只是一个节点模块。

后一种解决方案有nettuts + turtural


1自2014年8月以来,YQL必需的YUI库不再得到积极维护,来源


1
您可以使用DomHandler模​​块(与htmlparser2捆绑在一起)从htmlparser2获取DOM。它们是有意分离的,以允许其他类型的处理HTML,而不会产生DOM的开销。
特别是2013年

@esp谢谢,在我以为这是非标准DOM之前,我相应地更改了该部分。
Farid Nouri Neshat

我不确定您如何进行YQL爬网-更多是为了加入Web服务结果而不处理标记。
dardenfall 2014年

@dardenfall您说得对,爬网不是正确的术语。我通过刮擦更改了它:)
Farid Nouri Neshat

@Farid-(如果可以的话,我会尽快告诉您)冒着辩论的风险(抱歉!),我仍然看不到您如何使用它进行抓取。它与Web 服务而不是网站一起使用,而与wservices一起使用时,您很少解析html。也许是xml,但不是html。
dardenfall 2014年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.