سؤال

Html Agility Pack كان الجواب إلى ستاكوفيرفلوو السؤال منذ بعض الوقت, لا يزال الخيار الأفضل ؟ ما هي الخيارات الأخرى التي ينبغي النظر فيها ؟ هل هناك شيء أكثر وخفيفة الوزن ؟

هل كانت مفيدة؟

المحلول

هناك جدول مع مقارنات.

باختصار:

CsQuery الأداء مقابلHtml Agility Pack و Fizzler وضعت معا بعض اختبارات الأداء مقارنة CsQuery إلى عملي فقط البديل أن أعرف من (Fizzler ، HtmlAgilityPack التمديد).أنا اختبار ضد ثلاثة وثائق مختلفة:

  • همسة اختبار الوثيقة (حوالي 11 ك)
  • ويكيبيديا دخول "الجبن" (حوالي 170 ك)
  • صفحة واحدة HTML 5 المواصفات (حوالي 6 ميغا بايت)

النتائج الإجمالية هي:

  • هاب هو أسرع في التحميل سلسلة من HTML إلى نموذج كائن.هذا منطقي, منذ أنا لا أعتقد Fizzler يبني مؤشر (أو ربما يبني إلا واحد بسيط نسبيا).CsQuery يأخذ في أي مكان من 1.1 إلى 2.6 x أطول لتحميل الوثيقة.أكثر على هذا أدناه.
  • CsQuery أسرع عن كل شيء آخر تقريبا.في بعض الأحيان من العوامل من 10 ، 000 أو أكثر.الاستثناء الوحيد هو "*" محدد ، حيث في بعض الأحيان Fizzler أسرع.لجميع الاختبارات, نتائج تماما تعداد;هذه الحالة فقط النتائج في كل عقدة في شجرة يجري المذكورة.لذلك هذا لا اختبار محرك التحديد بقدر ما بنية البيانات.
  • CsQuery قام بعمل أفضل في العودة نفس النتائج المتصفح.كل من محددات هنا تم التحقق ضد نفس الوثيقة في كروم باستخدام مسج 1.7.2 و الأرقام تتطابق مع تلك التي تم إرجاعها بواسطة CsQuery.هذا هو الأرجح لأن HtmlAgilityPack مقابض اختياري (مفقود) فئة بشكل مختلف.بالإضافة إلى ذلك, nth-child لم يتم تنفيذ تماما في Fizzler - يدعم فقط بسيطة القيم (ليس الصيغ).

نصائح أخرى

وعندما يتعلق الأمر الاعراب HTML، وليس هناك مقارنة لشيء حقيقي. هذا هو C # ميناء محلل في validator.nu . هذا هو رمز قاعدة نفسها التي استخدمت من قبل المتصفحات مقرها أبو بريص (مثل فايرفوكس). الريبو هناك يبدو مغبر قليلا ولكن لا ينخدع .. ميناء المعلقة. تم التغاضي عنها فقط. I إدماجه في CsQuery قبل نحو شهر. يمر كل الاختبارات CsQuery (التي تشمل معظم مسج والاختبارات إز استدار إلى C #).

وأنا لست على علم بأي موزعي الآخرين HTML5 مكتوب في C #، أو حتى أي التي تأتي بعد بالقرب من القيام بعمل جيد من حيث المفقودين، واختياري، وغير صالحة التعامل مع العلامة. هذا لا مجرد القيام بعمل كبير على الرغم - انها متوافقة مع المعايير

ووالريبو أنا مرتبطة أعلاه هو المنفذ الأصلي، ويتضمن المجمع الأساسية التي تنتج شجرة عقدة XML. إصدارات CsQuery 1.3 واستخدام أعلى هذا المحلل.

وهناك أيضا AngleSharp

<اقتباس فقرة>   

وAngleSharp هي مكتبة NET التي تمنحك القدرة على تحليل زاوية قوس استنادا فرط النصوص مثل HTML، SVG، و MathML. ويدعم XML دون التحقق من صحة أيضا المكتبة. جانب هام من جوانب AngleSharp هو أن CSS يمكن أيضا تحليل. بنيت محلل على مواصفات W3C الرسمية. وهذا ينتج عنه تمثيل HTML5 DOM المحمولة تماما من شفرة المصدر معين. الميزات الحالية أيضا مثل querySelector أو querySelectorAll العمل من أجل اجتياز الشجرة.

Html Agility Pack كان الجواب إلى ستاكوفيرفلوو السؤال منذ بعض الوقت

Html Agility Pack لا تزال معلقة حل تحليل HTML.

أنها لا تزال أفضل الخيار ؟

أفضل ؟ جيدا أن كل هذا يتوقف على المهمة في متناول اليد, ولكن عموما أعتقد ذلك.هناك مناسبات عندما لا ترقى إلى كونها مثالية, ولكن بشكل عام فإنه سوف يقوم بعمل عظيم.

هل هناك شيء أكثر وخفيفة الوزن ؟

يمكنك أن تجرب هذا: http://csharptest.net/browse/src/Library/Html/ لا شيء أكثر من عدد من الملفات المصدر أن اختيار وبصرف النظر HTML/XML عبر Regex.وهو يدعم خفيفة الوزن دوم و XPath ولكن ليس أي شيء آخر.(محتويات مساعدة)

[مثال]

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);
}

بدلا من ذلك يمكنك استخدام محلل مباشرة بدلا من بناء شجرة DOM.فقط تنفيذ IXmlLightReader واجهة الاتصال ثابت XmlLightParser.تحليل الأسلوب.

PS:وقد كتب إلى حل في المناقشة:أن Regex يمكن تحليل HTML!ومنذ ذلك الحين ونحن في الواقع وجدت العديد من الاستخدامات لأنه خفيف الوزن بما يكفي تضمين أي مكان.لا تزال هناك طرق الخلط بين دوم heirarchy البناء, ولكن لم أجد أي HTML محلل لن التعامل معها.

ولقد استخدمت هذا من قبل، سهلة جدا تدفق المعهد. وأعتقد أن في C # / صافي نطاق، وهذا هو اختيار جيد للغاية.

وهناك مكتبة جافا هنا . تبدو جيدة على الرغم من أنني لم يكن لديك تجربة شخصية.

والأفضل هو مصطلح نسبي جدا، بالنسبة لسؤالك، أنا أتصور كنت تبحث عن وسيلة يمكن الاعتماد عليها، لذلك أعتقد يجب أن تؤخذ هذه الميزة في الاعتبار. وأود أن ننظر للدعم وقوة الشركة التي توفر الأداة. انه شعور فظيع عند محاولة الاتصال دعم أي أداة تستخدم والجواب هو، وهذه الشركة لم يعد موجودا. كما حافظت HAP من قبل مجتمع المطورين، وأود أن بدلا أثق بها.

إذا كنت على استعداد للنظر خارج العالم .NET، وPython SO يوصي المجتمع حساء جميل ، على سبيل المثال أتش تي أم أل محلل في والثعبان .

<اقتباس فقرة>   

وحساء جميل هو محلل بيثون HTML / XML مصممة لمشاريع التحول السريع مثل الشاشة تجريف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top