मैं Node.js के साथ एक HTML पृष्ठ कैसे पार्स करूं


92

मुझे बड़ी मात्रा में HTML पृष्ठों को पार्स (सर्वर साइड) करने की आवश्यकता है।
हम सभी सहमत हैं कि regexp यहां जाने का तरीका नहीं है।
यह मुझे लगता है कि जावास्क्रिप्ट एक HTML पृष्ठ पार्स करने का मूल तरीका है, लेकिन यह धारणा सर्वर साइड कोड पर निर्भर करती है जिसमें सभी DOM क्षमता जावास्क्रिप्ट एक ब्राउज़र के अंदर है।

क्या Node.js में वह क्षमता है?
क्या इस समस्या का एक बेहतर तरीका है, सर्वर पर HTML को पार्स करना?

जवाबों:


87

आप उपयोग कर सकते हैं NPM मॉड्यूल jsdom और htmlparser बना सकते हैं और Node.JS. में एक डोम पार्स करने के लिए

अन्य विकल्पों में शामिल हैं:

  • BeautifulSoup अजगर के लिए
  • आप आपको html को xHTML में बदल सकते हैं और XSLT का उपयोग कर सकते हैं
  • .NET के लिए HTMLAgilityPack
  • .NET के लिए CsQuery (मेरा नया पसंदीदा)
  • स्पाइडरमोंकी और राइनो JS इंजनों में देशी E4X सपोर्ट है। यह उपयोगी हो सकता है, केवल तभी जब आप अपने html को xHTML में बदलते हैं।

इन सभी विकल्पों में से, मैं Node.js विकल्प का उपयोग करना पसंद करता हूं, क्योंकि यह मानक W3C DOM एक्सेसर विधियों का उपयोग करता है और मैं क्लाइंट और सर्वर दोनों पर कोड का पुन: उपयोग कर सकता हूं। मैं चाहता हूँ कि ब्यूटीफुल के तरीके W3C डोम के समान थे, और मुझे लगता है कि XSLT लिखने के लिए अपने HTML को XHTML में बदलना सिर्फ सादा दुखवादी है।


3
अच्छे से आपका क्या मतलब है? विश्वसनीय, तेज, आसान? इन दोनों के साथ, यह काफी मजबूत है ताकि आप चाहते हैं कि आप jQuery के सर्वरसाइड का उपयोग कर सकें ।
kzh

1
@kzh विश्वसनीय और आसान मेरे लिए अधिक महत्वपूर्ण हैं यदि प्रक्रिया एक घंटे या एक दिन में समाप्त हो जाती है।
इटाए मोव -मालिमोवका

मैं कहूंगा कि नोड विकल्प विश्वसनीय है और निश्चित रूप से आसान है यदि आप पहले से ही डोम के लिए उपयोग किए जाते हैं।
kzh

यदि आप htmlparser के लिए शूट करते हैं, तो पहले github.com/fb55/node-htmlparser के साथ जाने का प्रयास करें । यह एक reworked संस्करण लगता है और अधिक सक्रिय रूप से बनाए रखा है।
cburgmer

मैंने पूरे इंटरनेट पर खोज की, लेकिन htmlparser के लिए एक अच्छा ट्यूटोरियल नहीं ढूंढा जा सका है ..
गीत

62

Cheerio का उपयोग करें । यह jsdom जितना सख्त नहीं है और इसे स्क्रैप करने के लिए अनुकूलित है। एक बोनस के रूप में, jQuery के चयनकर्ताओं का उपयोग करता है जिन्हें आप पहले से जानते हैं।

❤ परिचित सिंटैक्स: चीयरियो कोर jQuery के सबसेट को लागू करता है। Cheerio jQuery पुस्तकालय से सभी DOM विसंगतियों और ब्राउज़र cruft को हटाता है, इसके सही मायने में भव्य एपीआई का खुलासा करता है।

a धधकते हुए तेज: Cheerio एक बहुत ही सरल, सुसंगत DOM मॉडल के साथ काम करता है। परिणामस्वरूप, पार्सिंग, हेरफेर और प्रतिपादन अविश्वसनीय रूप से कुशल हैं। प्रारंभिक एंड-टू-एंड बेंचमार्क बताते हैं कि चीयरसियो JSDOM की तुलना में लगभग 8x तेज है।

❁ पूरी तरह से लचीला: Cheerio @ FB55 के माफ करने वाले htmlparser के चारों ओर घूमता है। Cheerio लगभग किसी भी HTML या XML दस्तावेज़ को पार्स कर सकता है।


8
लेकिन डोम का निर्माण नहीं करता है और XPath की अनुमति नहीं देता है। jQuery वाक्यविन्यास निश्चित रूप से उस पुस्तकालय का एक नकारात्मक पहलू है।
polkovnikov.ph

2
मेरे अनुभव में @ polkovnikov.ph बहुत कम अनुप्रयोगों के लिए पूर्ण डोम पार्सिंग की आवश्यकता होती है, और डोम का निर्माण jQuery / Cheerio में तेजी से "आलसी" मूल्यांकन की तुलना में बहुत महंगा है। इस अर्थ में jQuery- स्टाइल पार्सिंग एक लाभ है, लेकिन यदि आपके एप्लिकेशन को DOM सर्वर-साइड में हेरफेर करने की आवश्यकता है, तो आप jsdom आज़माना पसंद कर सकते हैं।
मियोकी

jsdomउस के लिए बहुत धीमी है: /
polkovnikov.ph

2
@MohamedMansour जो इसके लायक है, हम उत्पादन में चीयरियो का उपयोग कर रहे हैं और कुछ ही सेकंड में हजारों पृष्ठों को स्क्रैप कर रहे हैं। "तेज" और "धीमा" सभी आपके आवेदन और पाठ्यक्रम की बैंडविड्थ के सापेक्ष हैं।
Meekohi

गैर-सख्त: +1। jQuery वाक्यविन्यास: +1।
cheesus

11

Htmlparser2 का उपयोग करें , इसका तरीका तेज और बहुत सीधा है। इस उपयोग उदाहरण से परामर्श करें:

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

और यहां लाइव डेमो:

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


सटीक प्रकार का आउटपुट कैसे प्राप्त करें, जो इस डेमो में मिलता है?
राइजिंगएजेंट

6

FB55 द्वारा Htmlparser2 एक अच्छा विकल्प लगता है।


3
और इस रिटर्न फॉर्मेट का क्या करना चाहिए ? लूप्स और ट्री ट्रैवर्सल्स के लिए एक गुच्छा लिखें?
polkovnikov.ph

आप टैग घटनाओं को खोलने / बंद करने के लिए पंजीकरण कर सकते हैं, इसलिए आप जो चाहते हैं उसके आधार पर, यह वास्तव में एक अच्छा विकल्प है।
फिल

@ polkovnikov.ph एक ही लेखक द्वारा डोमुटिल्स पैकेज भी है जो htmlparser2 द्वारा लौटाए गए प्रारूप के साथ काम करता है - इसमें बहुत सारी विधियाँ हैं, जिनमें से कुछ में डोम तरीकों के समान वाक्यविन्यास हैं, कुछ अलग हैं; आपको वास्तव में ऑब्जेक्ट को मैन्युअल रूप से पार करने की आवश्यकता नहीं होगी। कोई डॉक्स नहीं है, लेकिन स्रोत कोड सुपर स्पष्ट है - यह सभी काम करता है जैसा कि आप उम्मीद करेंगे।
esp

अभी तक नहीं, लेकिन क्या आप इसे विस्तारित करना बंद कर देता है? यह मुश्किल नहीं है कि यह पहले से ही काम करता है का उपयोग कर।
esp

2

jsdom किसी भी वास्तविक स्क्रीन को छांटने के लिए बहुत सख्त है, लेकिन सुंदर मार्स खराब मार्कअप पर नहीं चलते हैं।

नोड-सूपसेलेटन , न्यूट्रोज में अजगर के सुंदरसप का एक बंदरगाह है, और यह खूबसूरती से काम करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.