2011-11-02 56 views
158

nodejs上是否有类似Ruby的nokogiri? 我的意思是一个用户友好的HTML解析器。Node.js上的HTML解析器

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

+3

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

+0

如果您对jQuery感到满意,请考虑[此答案](http://stackoverflow.com/a/31361044/778272)。 –

+1

你们为什么总是把所有事情都评定为脱离主题或者不可接受?这是一个真正的人,有一个合法的问题。你只需要继续并关闭它。它会让你感觉重要吗? –

回答

389

如果你想建立DOM你可以使用jsdom

还有cheerio,它有jQuery接口,它比老版本的jsdom快很多,尽管现在它们在性能上差不多。

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

parse5也看起来像一个很好的解决方案。它非常活跃(自上次提交此更新以来已有11天),符合WHATWG标准,用于jsdomAngularPolymer

如果你想解析HTML为web scraping,你可以使用YQL。有一个node module它。 YQL我认为如果你的HTML来自static网站,这将是最好的解决方案,因为你依赖的是服务,而不是你自己的代码和处理能力。虽然请注意,如果网页的robot.txt不允许网页,YQL将无法使用。

如果您要搜索的网站是dynamic,那么您应该使用headless browser,比如phantomjs。如果你正在考虑phantomjs,也请看casperjs。你可以用节点SpookyJS控制casperjs。

除了phantomjs,还有zombiejs。与不能嵌入到nodej中的phantomjs不同,zombiejs只是一个节点模块。

后面的解决方案有nettuts+ toturial

+12

非常完整的答案。不错的工作。 –

+1

您可以使用DomHandler模​​块(与htmlparser2捆绑)从htmlparser2获取DOM。它们被有意地分开以允许其他类型的处理HTML而不用创建DOM的开销。 – esp

+0

@esp谢谢,在我认为它是非标准DOM之前,我相应地更改了该部分。 –

17

更新:cheerio可能是你最好的选择。

Node.io是一个相当全面的抓取工具。

+4

Node.io不再被维护,他的作者建议现在使用[cheerio](https://github.com/MatthewMueller/cheerio) 。 –

+0

谢谢,更新答案。 – Will