سؤال

حسنا حصلت على هذا الرمز:

public static string ScreenScrape(string url)
    {
        System.Net.WebRequest request = System.Net.WebRequest.Create(url);
        // set properties of the request
        using (System.Net.WebResponse response = request.GetResponse())
        {
            using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
            {
                return reader.ReadToEnd();
            }
        }
    }

الآن أريد تصفية النص للحصول على فئة DIV = "التعليق" هل هناك خيار آخر غير استخدام التعبيرات العادية؟ أم أن هذه هي الطريقة الوحيدة؟

شكرا

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

المحلول

تحتاج إلى استخدام حزمة أجريتي HTML.

علي سبيل المثال:

var doc = new HtmlWeb().Load(url);
var comments = doc.Descendants("div")
                  .Where(div => div.GetAttributeValue("class", "") == "comment");

لاحظ أن هذا لن يجد <div class="OtherClass comment">; ؛ إذا كنت تبحث عن ذلك، يمكنك الاتصال IndexOf.

نصائح أخرى

HTMLAGILEPACK هو مجرد حزمة، تتيح لك التلاعب بملفات HTML، ولكن إذا كنت تريد القيام بشاشة Screap Selenium Webdriver مع Phantomjs هو الحل الأفضل. Phantomjs هو متصفح الويب بلا رأس حتى يكون سريعا حقا. علاوة على ذلك، تتمتع بوظائف أفضل بكثير مقارنة ب Pack Overity HTML. هناك قصيرة مسار في هذا الموضوع.

لا تستخدم تعبيرات منتظمة لتحليل HTML - فهي أداة خاطئة للعمل، كما HTML معقدة للغاية بالنسبة لهم.
يجب عليك استخدام محلل HTML.
أنظر أيضا:تبحث عن c # html المحلل

يجب أن تكون المنفذ الأول للاتصال حزمة أجريتي HTML.

تعتبر التعبيرات العادية هي الطريقة الكلاسيكية لتحليل هذا النوع من المدخلات لغات غير.

الإضافات، إذا استطعت تطبيع ذلك إلى متغير XML (أي XHTML)، يمكنك استخدام XPath للاستعلام واسترداد العقد المطلوبة.

ما لا تريد القيام به هو تطبيق المحلل المحلل الخاص بك.

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