HTML-аналізатор на Node.js [закрито]


198

Чи є щось на зразок нокогірі Рубі на nodejs? Я маю на увазі зручний-парсер HTML-аналізатора.

Я бачив на сторінці модулів Node.js деякі парсери, але я не можу знайти щось гарне та свіже.


3
Що ви маєте на увазі під "дружнім"? Зручно працювати та вибирати вузли, як, наприклад, підтримка XPath та CSS селектора Nokogiri? Придатний до розбору недійсного HTML "супу з тегів"?
Фрогз

Якщо вам подобається jQuery, розгляньте цю відповідь .
Лусіо Пайва

Відповіді:


446

Якщо ви хочете створити DOM, ви можете використовувати jsdom .

Також є cheerio , він має jQuery інтерфейс і він набагато швидший, ніж старіші версії jsdom, хоча в наші дні вони схожі за продуктивністю.

Можливо, ви хочете подивитися на htmlparser2 , який є потоковим аналізатором, і відповідно до його орієнтиру, схоже, він швидший за інших, і за замовчуванням немає DOM. Він також може створити DOM, оскільки він також в комплекті з обробником, який створює DOM. Це парсер, який використовується cheerio.

parse5 також виглядає як хороше рішення. Він досить активний (11 днів з моменту останньої передачі даних після цього оновлення), сумісний із WHATWG, і використовується у jsdom , Angular та Polymer .

І якщо ви хочете проаналізувати HTML для веб-вискоблювання , ви можете використовувати YQL 1 . Для цього є модуль вузла . YQL, я думаю, було б найкращим рішенням, якщо ваш HTML із статичного веб-сайту, оскільки ви покладаєтесь на сервіс, а не власний код та потужність обробки. Хоча зауважте, що вона не працюватиме, якщо сторінку заборонено роботом.txt веб-сайту, YQL не буде працювати з нею.

Якщо веб-сайт, на який ви намагаєтеся скребкувати, динамічний, то вам слід використовувати безголовий браузер, як Phantomjs . Також погляньте на casperjs , якщо ви розглядаєте phantomjs. І ви можете керувати casperjs з вузла за допомогою SpookyJS .

Поруч із фантомками є зомбі . На відміну від phantomjs, який не можна вбудувати у nodejs, zombiejs - це просто модуль вузла.

Для останніх рішень існує nettuts + toturial .


1 З серпня 2014 року бібліотека YUI, яка є вимогою для YQL, більше не підтримується, джерело


1
Ви можете отримати DOM від htmlparser2 за допомогою модуля DomHandler (в комплекті з htmlparser2). Вони розділені за призначенням, щоб дозволити інші види обробки HTML без накладних витрат на створення DOM.
esp

@esp Спасибі, Перш ніж я подумав, що це нестандартний DOM, я змінив відповідний розділ відповідно.
Фарид Нурі Нешат

Я не впевнений, як ви YQL для сканування - це більше для приєднання до результатів веб-служб, а не для обробки розмітки.
dardenfall

@dardenfall Ви маєте рацію, сканування не є правильним терміном. Я змінив це за допомогою вискоблювання :)
Фарид Нурі Нешат

@Farid - (я б просто надіслав вам повідомлення, якщо зможу), ризикуючи обговорити коментарі (вибачте!) Я досі не бачу, як ви це використовуєте для вискоблювання. Він працює з веб- сервісами не з веб- сайтами, а з послугами, ви рідко розбираєте html. Можливо, xml, але не html.
dardenfall


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.