2011-09-10 17 views
72

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

क्या Node.js में उस क्षमता का निर्माण किया गया है?
क्या इस समस्या का बेहतर दृष्टिकोण है, सर्वर पर HTML को पार्स करना?

उत्तर

66

आप npm मॉड्यूल jsdom और htmlparser का उपयोग नोड में जेओएम बनाने और विश्लेषण करने के लिए कर सकते हैं। जेएस।

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

  • BeautifulSoup अजगर
  • के लिए आप आप html to xhtml कन्वर्ट और XSLT का उपयोग कर सकते
  • नेट
  • CsQuery नेट के लिए (मेरी नई पसंदीदा)
  • के लिए HTMLAgilityPack स्पाइडरमॉन्की और राइनो जेएस इंजनों में मूल ई 4 एक्स समर्थन है। यह उपयोगी हो सकता है, केवल तभी जब आप अपना एचटीएमएल xhtml में कनवर्ट करते हैं।

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

+3

यह एक अच्छा दृष्टिकोण हालांकि Node.js का उपयोग करके HTML पार्स करने के लिए है इस प्रयोग के उदाहरण से परामर्श करें? –

+3

अच्छा क्या मतलब है? विश्वसनीय, तेज़, आसान? इन दोनों के साथ, यह काफी मजबूत है ताकि आप [jQuery सर्वरसाइड का उपयोग कर सकें] (http://stackoverflow.com/questions/1801160/can-i-use-jquery-with-node-js)। – kzh

+5

+1 - यदि आप नोड का उपयोग करना चाहते हैं, तो यह जाने का तरीका है। – josh3736

0

.NET में, HTML Agility Pack है, जो एक बेहद ठोस HTML पार्सिंग लाइब्रेरी है।

+3

क्या यह नोड.जेएस के साथ काम करता है? – kzh

+4

@kzh: नहीं, लेकिन मेरा प्रश्न पढ़ने (और ओपी की [टिप्पणी] (http://stackoverflow.com/questions/7372972/how-do-i-parse-a-html-page-with-node- जेएस/7373003 # टिप्पणी -88 99571)) यह है कि वह अन्य [गैर-नोड] विकल्पों के लिए खुला है। – josh3736

4

Htmlparser2 एफबी 55 द्वारा एक अच्छा विकल्प प्रतीत होता है।

+3

और [इस रिटर्न प्रारूप] के साथ क्या करना चाहिए (http://demos.forbeslindesay.co.uk/htmlparser2/)? लूप और पेड़ ट्रैवर्सल के लिए एक गुच्छा लिखें? –

+0

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

+0

@ polkovnikov.ph एक ही लेखक द्वारा [domutils] (https://github.com/FB55/domutils) पैकेज भी है जो HTMLparser2 द्वारा दिए गए प्रारूप के साथ काम करता है - इसमें कई विधियां हैं, जिनमें से कुछ समान हैं डीओएम विधियों के रूप में वाक्यविन्यास, कुछ अलग हैं; आपको मैन्युअल रूप से ऑब्जेक्ट को पार करने की आवश्यकता नहीं होगी। वहां कोई दस्तावेज़ नहीं है, लेकिन स्रोत कोड सुपर स्पष्ट है - यह सब काम करता है जैसा आप उम्मीद करेंगे। – esp

1

जेएसडम किसी भी असली स्क्रीन स्क्रैपिंग चीजों को करने के लिए बहुत सख्त है, लेकिन सुंदरसूप खराब मार्कअप पर नहीं दबाता है।

node-soupselect NodeJS में अजगर के BeautifulSoup के एक बंदरगाह है, और यह खूबसूरती से काम करता है

52

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

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

ϟ तेजस्वी तेज़: चेरीओ एक बहुत ही सरल, सुसंगत डॉम मॉडल के साथ काम करता है। नतीजतन पार्सिंग, मैनिपुलेटिंग और प्रतिपादन अविश्वसनीय रूप से कुशल हैं। प्रारंभिक अंत-टू-एंड बेंचमार्क सुझाव देते हैं कि जेएसडीओएम की तुलना में चेरीओ 8x तेज है।

❁ बेहद लचीला: चेरीओ @ एफबी 55 के क्षमा करने वाले htmlparser के आसपास लपेटता है। चीरियो लगभग किसी भी एचटीएमएल या एक्सएमएल दस्तावेज़ का विश्लेषण कर सकते हैं।

+6

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

+1

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

+0

'jsdom' उस के लिए बहुत धीमा है:/ –

संबंधित मुद्दे