2011-11-02 192 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