2009-06-30 15 views
52

Html Agility Pack को कुछ समय पहले StackOverflow question का उत्तर दिया गया था, क्या यह अभी भी सबसे अच्छा विकल्प है? अन्य विकल्पों पर विचार किया जाना चाहिए? क्या कुछ हल्का वजन है?क्या एचटीएमएल एजिलिटी पैक अभी भी सबसे अच्छा .NET HTML पार्सर है?

+0

एचटीएमएल पार्सर की कमी .NET मानक लाइब्रेरी से एक चमकदार चूक है। "Http अनुरोध करें और प्रतिक्रिया का विश्लेषण करें" वेब की उम्र में रोटी और मक्खन है, दूसरे कार्यक्रम लोग 'हैलो वर्ल्ड' के बाद लिखते हैं। –

+0

@ कोलोनेलपैनिक, इन दिनों डेटा प्राप्त करने के लिए जेएसक्रिप्ट का उपयोग कर अधिकांश वेब पेजों के साथ, आपको एक HTML पार्सर की आवश्यकता होती है। –

+0

दिसंबर 2015 की समीक्षा देखें http://forcewake.me/how-to-parse-html-in-dotnet/, AngleSharp सक्रिय रूप से बनाए रखा गया है (https://dotnet.libhunt.com/project/anglesharp/vs/htmlagilitypack) –

उत्तर

49

तुलना के साथ spreadsheet है।

सारांश में:

CsQuery प्रदर्शन बनाम एचटीएमएल चपलता पैक और Fizzler मैं एक साथ रखा कुछ प्रदर्शन परीक्षणों केवल व्यावहारिक विकल्प है कि मैं (Fizzler, एक HtmlAgilityPack विस्तार) के बारे में पता करने के लिए CsQuery तुलना करने के लिए। मैं तीन अलग-अलग दस्तावेजों के खिलाफ परीक्षण किया:

  • कड़ाके की धूप परीक्षण दस्तावेज़ (के बारे में 11 ट)
  • "पनीर" (लगभग 170 ट)
  • एकल पृष्ठ एचटीएमएल 5 कल्पना के लिए विकिपीडिया प्रविष्टि (के बारे में 6 मेगाबाइट)

समग्र परिणाम हैं:

  • HAP एक में HTML का स्ट्रिंग लोड हो रहा है पर तेजी से होता है एन ऑब्जेक्ट मॉडल। यह समझ में आता है, क्योंकि मुझे नहीं लगता कि फिजलर एक इंडेक्स बनाता है (या शायद यह केवल अपेक्षाकृत सरल बनाता है)। दस्तावेज़ लोड करने के लिए CsQuery 1.1 से 2.6x तक कहीं भी लेता है। नीचे पर और अधिक।
  • सीएसक्वियर लगभग हर चीज के लिए तेज़ है। कभी-कभी 10,000 या उससे अधिक कारकों के कारण। एक अपवाद "*" चयनकर्ता है, जहां कभी-कभी फिजलर तेज़ होता है। सभी परीक्षणों के लिए, परिणाम पूरी तरह से गणना किए गए हैं; इस मामले में पेड़ में प्रत्येक नोड में अंकित होता है। इसलिए यह डेटा संरचना के रूप में चयन इंजन का परीक्षण नहीं करता है।
  • CsQuery ने ब्राउज़र के समान परिणाम लौटने पर बेहतर काम किया। यहां पर प्रत्येक चयनकर्ता को उसी दस्तावेज़ के विरुद्ध क्रोम jQuery 1.7.2 का उपयोग करके सत्यापित किया गया था, और संख्या CsQuery द्वारा लौटाई गई मिलान से मेल खाती है। ऐसा शायद इसलिए है क्योंकि HtmlAgilityPack वैकल्पिक (अनुपलब्ध) टैग को अलग-अलग संभालता है। इसके अतिरिक्त, nth-child को पूरी तरह से फ़िज़लर में लागू नहीं किया गया है - यह केवल सरल मानों (सूत्र नहीं) का समर्थन करता है।
+0

Awesonium भी इस सूची का हिस्सा होना चाहिए। यह भी कूलर है, यह जावास्क्रिप्ट का मूल्यांकन और निष्पादन कर सकता है! – jessehouwing

+0

http://www.awesomium.com/ – jessehouwing

+2

एचटीएमएल एजिलिटी पैक एचटीएमएल पार्सर हेडलेसियम के रूप में हेडलेस ब्राउजर नहीं है। –

2

मैंने पहले इसका उपयोग किया है, बहुत आसान-से-प्रवाह एपीआई। मुझे लगता है कि सी #/नेट डोमेन में, यह एक बहुत अच्छी पसंद है।

एक जावा पुस्तकालय here है। हालांकि मुझे व्यक्तिगत अनुभव नहीं है, भले ही बहुत अच्छा लगता है।

1

आप .NET दुनिया के बाहर देखने के लिए तैयार हैं, Python अतः समुदाय की सिफारिश की Beautiful Soup, उदाहरण html-parser-in-python के लिए।

सुंदर सूप एक पायथन एचटीएमएल/एक्सएमएल पार्सर है जो स्क्रीन-स्क्रैपिंग जैसी त्वरित टर्नअराउंड परियोजनाओं के लिए डिज़ाइन किया गया है।

9

एचटीएमएल चपलता पैक एक StackOverflow सवाल का जवाब एचटीएमएल चपलता पैक अभी भी HTML पार्स करने के लिए एक उत्कृष्ट समाधान है कुछ समय पहले

के रूप में दिया गया था।

क्या यह अभी भी सर्वोत्तम विकल्प है?

बेस्ट? ठीक है कि सभी काम पर निर्भर करता है, लेकिन आम तौर पर मुझे ऐसा लगता है। ऐसे अवसर होते हैं जब यह आदर्श होने से कम हो जाता है, लेकिन आमतौर पर यह एक अच्छा काम करेगा।

क्या कुछ और हल्का वजन है? एक हाथ से पूर्ण स्रोत फ़ाइलों कि Regex के माध्यम से HTML/एक्सएमएल अलग लेने की http://csharptest.net/browse/src/Library/Html/ यह से ज्यादा कुछ नहीं है:

आप इस कोशिश कर सकते। यह एक हल्के वजन वाले डोम और XPath का समर्थन करता है लेकिन बहुत कुछ नहीं। (help contents)

[उदाहरण]

public void TestParse() { 
     string notxml = "<html id=a ><body foo='bar' bar=\"foo\" />"; 
     var html = new HtmlLightDocument(notxml).Root; 

     Assert.AreEqual("html", html.TagName); 
     Assert.AreEqual(1, html.Attributes.Count); 
     Assert.AreEqual("a", html.Attributes["id"]); 
     Assert.AreEqual(1, html.Children.Count); 
} 

वैकल्पिक रूप से आप एक डोम पेड़ के निर्माण के बजाय सीधे पार्सर का उपयोग कर सकते हैं। बस IXmlLightReader इंटरफ़ेस को कार्यान्वित करें, और स्थिर XmlLightParser.Parse विधि को कॉल करें।

पीएस: यह एक घर में बहस को हल करने के लिए लिखा गया था: कि Regex पार्स एचटीएमएल कर सकते हैं! तब से हमने वास्तव में इसके लिए कई उपयोग किए हैं क्योंकि यह कहीं भी एम्बेड करने के लिए पर्याप्त हल्का है। डोम विरासत निर्माता को भ्रमित करने के अभी भी तरीके हैं, लेकिन मुझे कोई HTML नहीं मिला है जो पार्सर संभाल नहीं पाएगा।

+0

टेक्स्ट में 'exampleAttribute' का उपयोग किया जा रहा है। =) –

33

जब एचटीएमएल पार्सिंग की बात आती है, तो वास्तविक चीज़ की कोई तुलना नहीं होती है। यह C# port of the validator.nu पार्सर है। यह गीको-आधारित ब्राउज़र (जैसे फ़ायरफ़ॉक्स) द्वारा उपयोग किया गया एक ही कोड बेस है। वहाँ रेपो थोड़ा धूल दिखता है लेकिन मूर्ख मत बनो .. बंदरगाह बकाया है। इसे अभी अनदेखा कर दिया गया है। मैंने इसे एक महीने पहले CsQuery में एकीकृत किया था। यह सभी CsQuery परीक्षणों को पास करता है (जिसमें सी # को पोर्ट किए गए अधिकांश jQuery और Sizzle परीक्षण शामिल हैं)।

मुझे सी # में लिखे गए किसी अन्य HTML5 पार्सर्स से अवगत नहीं है, या यहां तक ​​कि कोई भी जो लापता, वैकल्पिक और अमान्य टैग हैंडलिंग के मामले में अच्छी नौकरी करने के लिए दूरस्थ रूप से करीब आ गया है। यह सिर्फ एक महान काम नहीं करता है - यह मानकों के अनुरूप है।

उपरोक्त से संबंधित रेपो मैं मूल बंदरगाह है, इसमें एक मूल आवरण शामिल है जो एक्सएमएल नोड पेड़ का उत्पादन करता है। CsQuery संस्करण 1.3 और उच्चतम इस पार्सर का उपयोग करें।

+8

मुझे इस तथ्य से प्यार करना पड़ा कि स्वीकार्य उत्तर _your_ ब्लॉग पर एक लेख का एक लिंक है और _you_ उद्धृत अनुच्छेद है। जीत के लिए +400 प्रतिष्ठा, हाहा। –

2

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

7

वहाँ भी AngleSharp

AngleSharp एक .NET पुस्तकालय के लिए आपको HTML, एसवीजी, और MathML तरह कोण कोष्ठक आधारित अति ग्रंथों को पार्स करने की क्षमता देता है। सत्यापन के बिना एक्सएमएल पुस्तकालय द्वारा भी समर्थित है। कोणशर्प का एक महत्वपूर्ण पहलू यह है कि सीएसएस को भी पार्स किया जा सकता है। पार्सर आधिकारिक डब्ल्यू 3 सी विनिर्देश पर बनाया गया है। यह दिए गए स्रोत कोड का एक पूरी तरह से पोर्टेबल एचटीएमएल 5 डीओएम प्रतिनिधित्व पैदा करता है। क्वेरी सिलेक्टर या क्वेरी सिलेक्टर जैसे वर्तमान फीचर्स पेड़ ट्रैवर्सल के लिए सभी काम करते हैं।

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