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ź .
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.
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.
Odpowiedzi:
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
źródło
Spróbuj https://github.com/tmpvar/jsdom - dajesz mu trochę HTML i daje DOM.
źródło
Możesz także spojrzeć na zdjęcie rentgenowskie: https://github.com/lapwinglabs/x-ray
źródło