Parser HTML na Node.js [zamknięte]

198

Czy jest coś takiego jak nokogiri Ruby na nodejs? Mam na myśli przyjazny dla użytkownika parser HTML.

Widziałem na stronie modułów Node.js kilka parserów, ale nie mogę znaleźć czegoś ładnego i świeżego.

asci
źródło
3
Co rozumiesz przez „przyjazny”? Wygodny w pracy i wybieraniu węzłów, takich jak XPath Nokogiri i obsługa selektora CSS? Czy można analizować nieprawidłowy kod HTML „zupy tagów”?
Phrogz
Jeśli nie masz nic przeciwko jQuery, rozważ tę odpowiedź .
Lucio Paiva,

Odpowiedzi:

446

Jeśli chcesz zbudować DOM , możesz użyć jsdom .

Jest też cheerio , ma interfejs jQuery i jest znacznie szybszy niż starsze wersje jsdom, chociaż w dzisiejszych czasach są one podobne pod względem wydajności.

Możesz rzucić okiem na htmlparser2 , który jest parserem przesyłania strumieniowego, i zgodnie z jego testem porównawczym wydaje się być szybszy niż inne i domyślnie nie ma DOM. Może również tworzyć DOM, ponieważ jest również pakowany w moduł obsługi, który tworzy DOM. To jest parser używany przez cheerio.

parse5 również wygląda na dobre rozwiązanie. Jest dość aktywny (11 dni od ostatniego zatwierdzenia od tej aktualizacji), zgodny z WHATWG i jest używany w jsdom , Angular i Polymer .

A jeśli chcesz parsować HTML do skrobania stron internetowych , możesz użyć YQL 1 . Jest do tego moduł węzła . YQL Myślę, że byłoby najlepszym rozwiązaniem, jeśli Twój HTML pochodzi ze statycznej strony internetowej, ponieważ polegasz na usłudze, a nie na własnym kodzie i sile przetwarzania. Pamiętaj jednak, że nie będzie działać, jeśli strona zostanie niedozwolona przez plik rob.txt witryny, ale YQL nie będzie z nią działać.

Jeśli witryna, którą próbujesz zeskrobać, jest dynamiczna , powinieneś używać przeglądarki bezgłowej, takiej jak phantomjs . Spójrz także na casperjs , jeśli zastanawiasz się nad phantomjs. I możesz kontrolować casperjs z węzła za pomocą SpookyJS .

Obok fantomów jest zombiejs . W przeciwieństwie do fantomów, których nie można osadzić w nodejs, zombiejs jest tylko modułem węzła.

Dla tych ostatnich rozwiązań istnieje nettuts + toturial .


1 Od sierpnia 2014 biblioteka YUI, która jest wymagana dla YQL, nie jest już aktywnie utrzymywana, źródło

Farid Nouri Neshat
źródło
1
Możesz uzyskać DOM z htmlparser2 za pomocą modułu DomHandler (w pakiecie z htmlparser2). Są one celowo oddzielone, aby umożliwić inne rodzaje przetwarzania HTML bez konieczności tworzenia DOM.
esp
@esp Dzięki, zanim pomyślałem, że to niestandardowy DOM, odpowiednio zmieniłem tę sekcję.
Farid Nouri Neshat
Nie jestem pewien, w jaki sposób YQL do indeksowania - chodzi bardziej o dołączanie do wyników usługi internetowej, a nie przetwarzanie znaczników.
dardenfall
@dardenfall Masz rację, indeksowanie nie jest właściwym terminem. Zmieniłem to za pomocą skrobania :)
Farid Nouri Neshat
@Farid - (wysłałbym Ci wiadomość, gdybym mógł) na ryzyko debatowania w komentarzach (przepraszam!) Nadal nie rozumiem, jak używasz go do skrobania. Działa z usługami internetowymi, a nie witrynami, a przy usługach rzadko analizujesz HTML. Może xml, ale nie HTML.
dardenfall