如何使用Node.jsparsingHTML页面

我需要parsing(服务器端)大量的HTML页面。
我们都同意,正则expression式不是去这里的路。
在我看来,JavaScript是parsingHTML页面的原生方式,但是这个假设依赖于服务器端代码具有浏览器内部的所有DOM能力。

Node.js是否具有内置的能力?
有没有更好的方法解决这个问题,在服务器端parsingHTML?

您可以使用npm模块jsdom和htmlparser在Node.JS中创build和parsingDOM。

其他选项包括:

  • 美丽的python
  • 你可以把你的html转换成xhtml并使用XSLT
  • HTMLAgilityPack for .NET
  • CsQuery for .NET(我最喜欢的)
  • spidermonkey和rhino JS引擎具有原生E4X支持。 这可能是有用的,只有当你转换你的HTML到XHTML。

在所有这些选项中,我更喜欢使用Node.js选项,因为它使用标准的W3C DOM访问器方法,并且可以在客户端和服务器上重复使用代码。 我希望BeautifulSoup的方法更类似于W3C dom,我认为把你的HTML转换成XHTML来编写XSLT只是简单的虐待行为。

使用Cheerio 。 它不像jsdom那么严格,并且为刮刮而优化。 作为奖励,使用你已经知道的jQueryselect器。

❤熟悉的语法:Cheerio实现了核心jQuery的一个子集。 Cheerio从jQuery库中删除了所有的DOM不一致和浏览器,揭示了它真正的华丽的API。

ϟ快速:Cheerio使用一个非常简单,一致的DOM模型。 因此parsing,操作和渲染非常高效。 初步的端到端基准testing表明,cheerio比JSDOM快大约8倍。

❁非常灵活:Cheerio围绕@ FB55的原谅htmlparser。 Cheerio可以parsing几乎所有的HTML或XML文档。

使用htmlparser2 ,它的方式更快,更简单。 请参考这个用法示例:

https://www.npmjs.org/package/htmlparser2#usage

现场演示在这里:

http://demos.forbeslindesay.co.uk/htmlparser2/

由FB55 Htmlparser2似乎是一个很好的select。

jsdom太严格,不能做任何真正的屏幕抓取的东西,但美丽的屁股不扼杀坏的标记。

node-soupselect是python的一个端口,可以很好的运行在nodejs中

在.NET中,有HTML Agility Pack ,它是一个非常可靠的HTMLparsing库。