2011-11-02 12 views
158

क्या रुडी के nokogiri जैसे नोडजेस पर कुछ है? मेरा मतलब है उपयोगकर्ता के अनुकूल HTML-पार्सर।Node.js पर HTML-parser

मैंने कुछ पार्सर्स को नोड.जेएस मॉड्यूल पेज पर देखा होगा, लेकिन मुझे कुछ सुंदर और ताजा नहीं मिल रहा है।

+3

क्या आप से 'दोस्ताना' क्या मतलब है? काम करने के लिए सुविधाजनक और नोडोगिरी के XPath और सीएसएस चयनकर्ता समर्थन जैसे नोड्स का चयन करें? अमान्य "टैग सूप" एचटीएमएल पार्स करने के लिए सक्षम? – Phrogz

+0

यदि आप jQuery के साथ सहज हैं, तो [इस उत्तर] पर विचार करें (http://stackoverflow.com/a/31361044/778272)। –

+1

आप लोग हमेशा विषय या अस्वीकार्य या जो भी हो, सब कुछ क्यों रेट करेंगे? यह एक वैध व्यक्ति के साथ एक वास्तविक व्यक्ति है। आपको बस आगे बढ़ना पड़ा और इसे बंद करना पड़ा। क्या यह आपको महत्वपूर्ण या कुछ महसूस करता है? –

उत्तर

389

यदि आप DOM बनाना चाहते हैं तो आप jsdom का उपयोग कर सकते हैं।

cheerio भी है, इसमें jQuery इंटरफ़ेस है और यह jsdom के पुराने संस्करणों की तुलना में बहुत तेज है, हालांकि इन दिनों वे प्रदर्शन में समान हैं।

आप htmlparser2 पर एक नज़र रखना चाहते हैं, जो एक स्ट्रीमिंग पार्सर है, और इसके बेंचमार्क के अनुसार, यह दूसरों की तुलना में तेज़ लगता है, और डिफ़ॉल्ट रूप से कोई DOM नहीं है। यह एक डोम भी उत्पन्न कर सकता है, क्योंकि यह एक हैंडलर के साथ भी बंडल किया जाता है जो एक डोम बनाता है। यह पार्सर है जिसका प्रयोग चीरियो द्वारा किया जाता है।

parse5 भी एक अच्छा समाधान की तरह दिखता है। यह काफी सक्रिय है (इस अद्यतन के रूप में अंतिम प्रतिबद्धता के 11 दिन बाद), WHATWG-compliant, और jsdom, Angular, और Polymer में उपयोग किया जाता है।

और यदि आप web scraping के लिए HTML को पार्स करना चाहते हैं, तो आप YQL का उपयोग कर सकते हैं। इसके लिए node module है। YQL मुझे लगता है कि यदि आपका HTML static वेबसाइट से है, तो मुझे लगता है कि आप एक सेवा पर निर्भर हैं, न कि अपना कोड और प्रोसेसिंग पावर। हालांकि ध्यान दें कि यदि पृष्ठ वेबसाइट के robot.txt द्वारा अस्वीकृत किया गया है, तो यह काम नहीं करेगा, YQL इसके साथ काम नहीं करेगा।

यदि आप जिस वेबसाइट को स्क्रैप करने का प्रयास कर रहे हैं वह dynamic है तो आपको headless browserphantomjs जैसे उपयोग करना चाहिए। यदि आप phantomjs पर विचार कर रहे हैं, तो casperjs पर भी एक नज़र डालें। और आप SpookyJS के साथ नोड से कैस्पर को नियंत्रित कर सकते हैं।

फ़ैंटोमज के अलावा zombiejs है। Phantomjs के विपरीत जो nodejs में एम्बेडेड नहीं किया जा सकता है, zombiejs सिर्फ एक नोड मॉड्यूल है।

बाद के समाधानों के लिए nettuts+ toturial है।

+12

बहुत पूरा जवाब। अच्छी नौकरी। –

+1

आप डोमहैंडलर मॉड्यूल (htmlparser2 के साथ बंडल) का उपयोग कर htmlparser2 से DOM प्राप्त कर सकते हैं।वे उद्देश्य पर अलग हो गए हैं ताकि डीओएम बनाने के ऊपरी हिस्से के बिना अन्य प्रकार के प्रोसेसिंग एचटीएमएल को अनुमति दी जा सके। – esp

+0

@ एएसपी धन्यवाद, इससे पहले कि मैंने सोचा कि यह गैर-मानक डोम था, मैंने तदनुसार उस खंड को बदल दिया। –

17

अद्यतन:cheerio शायद आपका सर्वश्रेष्ठ दांव है।

Node.io एक बहुत व्यापक स्क्रैपिंग टूल है।

+4

नोड.ओओ अब बनाए रखा नहीं गया है और उसका लेखक अब [चीरियो] (https://github.com/MatthewMueller/cheerio) का उपयोग करने की सिफारिश करता है –

+0

धन्यवाद, उत्तर अपडेट कर रहा है। – Will