Jak przetworzyć stronę HTML z węzłem.js

Muszę parsować (po stronie serwera) duże ilości stron HTML.
Wszyscy zgadzamy się, że regexp nie jest drogą, aby przejść tutaj.
Wydaje mi się, że javascript jest natywnym sposobem parsowania strony HTML, ale to założenie opiera się na kodzie po stronie serwera, który ma wszystkie możliwości Dom javascript w przeglądarce.

Robi Węzeł.js mają tę zdolność wbudowaną?
Czy istnieje lepsze podejście do tego problemu, parsowanie HTML po stronie serwera?

Author: Yves M., 2011-09-10

6 answers

Możesz używać modułów npm jsdom i htmlparser do tworzenia i analizowania DOM w węźle.JS.

Inne opcje to:

  • BeautifulSoup dla Pythona
  • możesz przekonwertować html na xhtml i użyć XSLT
  • HTMLAgilityPack dla. NET
  • CsQuery for. NET (my new favorite)
  • Silniki spidermonkey i rhino JS mają natywną obsługę E4X. Może to być przydatne, tylko jeśli Konwertuj swój html na xhtml.

Spośród wszystkich tych opcji, wolę używać węzła.opcja js, ponieważ używa standardowych metod W3C DOM accessor i mogę ponownie użyć kodu zarówno na kliencie, jak i na serwerze. Chciałbym, żeby metody BeautifulSoup były bardziej podobne do W3C dom, i myślę, że konwersja HTML do XHTML do zapisu XSLT jest po prostu sadystyczna.

 70
Author: kzh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-23 03:30:49

Use Cheerio . Nie jest tak rygorystyczny jak jsdom i jest zoptymalizowany do skrobania. Jako bonus, używa selektorów jQuery, które już znasz.

Familiar znana składnia: Cheerio implementuje podzbiór rdzenia jQuery. Cheerio usuwa wszystkie niespójności DOM i przeglądarka cruft z jQuery biblioteka, ujawniając jego naprawdę wspaniałe API.

Blaz niesamowicie szybko: Cheerio działa z bardzo prostym, spójnym DOM model. W rezultacie parsowanie, manipulowanie i renderowanie są niewiarygodnie wydajny. Wstępne benchmarki end-to-end sugerują, że cheerio jest około 8x szybciej niż JSDOM.

❁ Szalenie elastyczny: htmlparser. Cheerio może parsować prawie każdy dokument HTML lub XML.

 56
Author: Meekohi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-12 16:36:49

Użyj htmlparser2 , jego sposób szybszy i całkiem prosty. Zobacz ten przykład użycia:

Https://www.npmjs.org/package/htmlparser2#usage

I demo na żywo tutaj:

Http://demos.forbeslindesay.co.uk/htmlparser2/

 7
Author: Anderson Madeira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-28 12:04:19

Htmlparser2 by FB55 wydaje się być dobrą alternatywą.

 4
Author: esp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-20 18:09:13

Jsdom jest zbyt surowy, aby robić prawdziwe skrobanie ekranu, ale beautifulsoup nie dławi się złymi znacznikami.

Node-soupselect jest portem Pythona beautifulsoup do nodejs i działa pięknie

 1
Author: Yarek T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-24 11:40:12

W. NET znajduje się HTML Agility Pack , który jest niezwykle solidną biblioteką do parsowania HTML.

 0
Author: josh3736,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-10 16:36:46