سؤال

عندما لا يكون هناك Webservice API متاحا، قد يكون خيارك الوحيد هو فحص كشط، ولكن كيف يمكنك أن تفعل ذلك في C #؟

كيف تفكر في القيام بذلك؟

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

المحلول

إجابات مات وبولس صحيحة. "شاشة كشط" من خلال تحليل HTML من موقع ويب عادة ما تكون فكرة سيئة لأن:

  1. تحليل HTML يمكن أن يكون صعبا, ، خاصة إذا كانت مشوهة. إذا كنت تجريف صفحة بسيطة للغاية، فقد تعمل التعبيرات العادية. خلاف ذلك، استخدم إطار تحليل مثل حزمة أجراس HTML.

  2. المواقع هي هدف متحرك. وبعد ستحتاج إلى تحديث التعليمات البرمجية في كل مرة يغير موقع المصدر هيكل العلامات الخاصة به.

  3. كشط الشاشة لا يلعب جيدا مع جافا سكريبت. وبعد إذا كان موقع الويب المستهدف يستخدم أي نوع من النصي الديناميكي لمعالجة صفحة الويب التي ستكون لديك وقتا صعبا للغاية. من السهل الاستيلاء على استجابة HTTP، من الصعب للغاية كشط ما يعرضه المتصفح استجابة لبرنامج نصي جانب العميل الوارد في هذه الاستجابة.

إذا كان كشط الشاشة هو الخيار الوحيد، فهناك بعض المفاتيح للنجاح:

  1. اجعلها سهلة قدر الإمكان لتغيير الأنماط التي تبحث عنها. وبعد إذا كان ذلك ممكنا، تخزين الأنماط كملفات نصية أو في ملف مورد في مكان ما. اجعلها سهلة للغاية للمطورين الآخرين (أو لنفسك في 3 أشهر) لفهم العلامة التي تتوقع أن تجدها.

  2. التحقق من صحة المدخلات ورمي استثناءات ذات مغزى. وبعد في رمز تحليلك، احرص على جعل استثناءاتك مفيدة للغاية. الموقع المستهدف إرادة تغيير عليك، وعندما يحدث ذلك تريد أن تخبرك رسائل الخطأ الخاصة بك ليس فقط جزء من الرمز فشل، ولكن لماذا فشلت. أذكر كل من النمط الذي تبحث عنه والنص الذي تقارن فيه.

  3. اكتب الكثير من الاختبارات الآلية. وبعد تريد أن تكون من السهل جدا تشغيل مكشطة الخاص بك بطريقة غير مدمرة لأنك إرادة أن تفعل الكثير من التطوير التكراري للحصول على الأنماط الصحيحة. أتمتة أكبر قدر ممكن من الاختبار، وسوف تؤتي ثمارها على المدى الطويل.

  4. النظر في أداة أتمتة المتصفح مثل واتين. وبعد إذا كنت بحاجة إلى تفاعلات معقدة مع موقع الويب المستهدف، فقد يكون من الأسهل كتابة مكشطة الخاص بك من وجهة نظر المتصفح نفسه، بدلا من Mucking بطلبات HTTP والردود باليد.

أما بالنسبة لل كيف شاشة كشط في C #، يمكنك إما استخدام Watin (انظر أعلاه) وتكشير المستند الناتج باستخدام DOM، أو يمكنك استخدام WebClient Class [راجع MSDN أو Google] للحصول على استجابة HTTP RAW، بما في ذلك محتوى HTML، ثم استخدم نوعا من التحليل المستند إلى النص لاستخراج البيانات التي تريدها.

نصائح أخرى

يستخدم حزمة أجريتي HTML. وبعد انها تتعامل مع HTML سيئة ومشوهة. يتيح لك الاستعلام عن XPath، مما يجعل من السهل جدا العثور على البيانات التي تبحث عنها. لا تكتب محللا باليد ولا تستخدم تعبيرات منتظمة، فهي مجرد خرقاء للغاية.

المصطلح الذي تبحث عنه هو بالفعل يسمى شاشة كشط.

شيء واحد عليك أن تفكر في تجريب مواقع الويب هو أنه يتجاوز سيطرتك ويمكن أن تتغير بشكل متكرر وبشكل كبير. إذا كنت تذهب مع تجريف حقيقة التغيير يجب أن تكون جزءا من استراتيجيتك الشاملة. على سبيل المثال، ستحتاج إلى تحديث الكود الخاص بك عاجلا أم آجلا للتعامل مع "هدف متحرك".

فيما يلي بعض الروابط C # لتبدأ:

http://www.cambiaresearch.com/c4/3ee4f5fc-0545-4360-9BC7-5824F84SA28C/How-To-Scrape-or-orload-Aload-A-WebPage-using-csharp.aspx.

هنا نموذج رمز C # الذي سوف يساعدك

Uri url = new Uri("http://msdn.microsoft.com/en-US/");
if (url.Scheme == Uri.UriSchemeHttp)
{
    //Create Request Object
    HttpWebRequest objRequest = (HttpWebRequest)HttpWebRequest.Create(url);
    //Set Request Method
    objRequest.Method = WebRequestMethods.Http.Get;
    //Get response from requested url
    HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
    //Read response in stream reader
    StreamReader reader = new StreamReader(objResponse.GetResponseStream());
    string tmp = reader.ReadToEnd();
    objResponse.Close();
    //Set response data to container
    this.pnlScreen.GroupingText = tmp;
}

شيء واحد فقط يلاحظ، وقد ذكر عدد قليل من الناس سحب الموقع الإلكتروني ك XML ثم استخدام XPath للتكرار من خلال العقد. من المحتمل أن تتأكد من أنك تعمل مع موقع تم تطويره في XHTML للتأكد من أن HTML يمثل مستند XML مشكل جيدا.

من منظور عملي (لقد كتبت عشرات التطبيقات "التفاعلية" على مر السنين)، لقد استقرت أخيرا واتين مدموج مع csquery..

يوفر Watin أساسيات أتمتة المتصفح (تفاعل الأزرار وغيرها)، في حين يتيح لك Csquery استخدام بناء جملة نمط JQuery لتحليل محتوى الصفحة.

لقد استخدمت السيلينيوم لفترة من الوقت (مصممة أيضا للاختبار الآلي للمواقع الإلكترونية) مع IE و Firefox، ولكن وجدت أنه عرضة للتحطيم عند استخدامه لتجريف طويل الأجل. جميع أنظمة الإنتاج الحالية الخاصة بي هي Watin + Csquery وتوفر قصاصة موثوقة من مواقع الويب المتعددة على أساس يومي.

ملاحظة: أدرك واتين لم يتم تحديثها لفترة من الوقت، ولكن "إذا لم يتم كسرها، فاستخدمها!" :)

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