我需要解析(服务器端)大量的HTML页面。
我们都同意,正则表达式不是去这里的路。
在我看来,JavaScript是解析HTML页面的原生方式,但这种假设依赖于服务器端代码具有浏览器内部的所有DOM能力。如何使用Node.js解析HTML页面
Node.js是否有内置的能力?
有没有更好的方法来解决这个问题,在服务器端解析HTML?
我需要解析(服务器端)大量的HTML页面。
我们都同意,正则表达式不是去这里的路。
在我看来,JavaScript是解析HTML页面的原生方式,但这种假设依赖于服务器端代码具有浏览器内部的所有DOM能力。如何使用Node.js解析HTML页面
Node.js是否有内置的能力?
有没有更好的方法来解决这个问题,在服务器端解析HTML?
您可以使用npm模块jsdom和htmlparser在Node.JS中创建和分析DOM。
其他选项包括:
在所有这些选项中,我更喜欢使用Node.js选项,因为它使用标准的W3C DOM访问器方法,并且我可以在客户端和服务器上重复使用代码。我希望BeautifulSoup的方法更类似于W3C dom,我认为将您的HTML转换为XHTML来编写XSLT只是普遍的虐待行为。
在.NET中,有HTML Agility Pack,这是一个非常可靠的HTML解析库。
Htmlparser2通过FB55似乎是一个很好的选择。
应该怎么处理[这个返回格式](http://demos.forbeslindesay.co.uk/htmlparser2/)?写一堆for循环和树遍历? –
你可以注册打开/关闭标签事件,所以根据你想要的,这是一个非常好的替代imho。 – Phil
@ polkovnikov.ph同样的作者也有[domutils](https://github.com/FB55/domutils)包裹,它与htmlparser2返回的格式一起工作 - 它有很多方法,其中一些具有相同的方法DOM方法的语法,有些不同;你不会真的需要手动遍历对象。没有文档,但源代码非常清晰 - 它的工作原理与您所期望的一样。 – esp
jsdom太严格,无法做任何真正的屏幕抓取事情,但美丽的oup不会扼杀糟糕的标记。
node-soupselect是Python beautifulsoup成的的NodeJS一个端口,它精美的作品
使用Cheerio。它不像jsdom那样严格,并且针对抓取进行了优化。作为奖励,使用你已经知道的jQuery选择器。
❤熟悉的语法:Cheerio实现了核心jQuery的一个子集。 Cheerio 删除了jQuery 库中的所有DOM不一致和浏览器,显示出其真正华丽的API。
ϟ快速:Cheerio使用非常简单,一致的DOM 模型。因此,解析,操作和渲染的效率令人难以置信。初步的端到端基准测试表明,cheerio的速度比JSDOM快8倍左右。
❁非常灵活:Cheerio环绕@ FB55's原谅 htmlparser。 Cheerio可以解析几乎任何HTML或XML文档。
但是不构建DOM并且不允许XPath。 jQuery语法肯定是该库的一个缺点。 –
@ polkovnikov.ph在我的经验中,很少有应用程序需要完整的DOM解析,并且与jQuery/Cheerio中的快速“懒惰”评估相比,构建DOM是非常昂贵的。从这个意义上讲,jQuery风格的解析是一个好处,但是如果你的应用程序需要操纵DOM服务器端,你可能更愿意尝试jsdom。 – Meekohi
'jsdom'太慢了:/ –
如何获得此演示中获得的输出的确切类型? – RaisingAgent
是解析如何使用Node.js虽然HTML的好办法? –
你的意思是什么?可靠,快速,简单?那么这两个,它足够强大,以便您可以[如果您想使用jQuery服务器端](http://stackoverflow.com/questions/1801160/can-i-use-jquery-with-node-js)。 – kzh
+1 - 如果你想使用节点,这是要走的路。 – josh3736