سؤال

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

حتى الآن، أفضل استراتيجية يمكنني التفكير فيها هي تحديد قالب لكل نوع من الصفحات، مثل:

النموذج أ:

<html>
...
  <tr><td>Table column that is missing a td 
      <td> Another table column</td></tr>
  <tr><td>$data_item_1$</td>
...
</html>

القالب ب:

<html>
...
  <ul><li>Yet another poorly formatted page <li>$data_item_1$</td></tr>
...
</html>

بهذه الطريقة، سأحتاج فقط إلى محلل واحد لجميع الصفحات، والذي من شأنه أن يقارن كل صفحة بقالبها ويستعيد البيانات $data_item_1$, $data_item_2$, ، إلخ.ومع ذلك، سيكون هناك الكثير من العمل.هل يمكنك التفكير في أي حل أبسط؟هل هناك مكتبة يمكنها المساعدة؟

شكرًا

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

المحلول

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

نصائح أخرى

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

كما ذكر هنا وعلى إجابات SO الأخرى من قبل، حساء جميل يمكن تحليل HTML غريب.

Beautiful Soup هو محلل لغة Python HTML/XML مصمم لمشاريع التنفيذ السريع مثل تجريف الشاشة.ثلاث ميزات تجعلها قوية:

  1. لن يختنق الحساء الجميل إذا أعطيته علامة سيئة.إنه ينتج شجرة تحليل ذات معنى مماثل للمستند الأصلي.عادةً ما يكون هذا جيدًا بما يكفي لجمع البيانات التي تحتاجها والهروب.
  2. يوفر Beautiful Soup بعض الطرق البسيطة والتعابير البايثونية للتنقل والبحث وتعديل شجرة التحليل:مجموعة أدوات لتشريح مستند واستخراج ما تحتاجه.ليس عليك إنشاء محلل مخصص لكل تطبيق.
  3. يقوم برنامج Beautiful Soup تلقائيًا بتحويل المستندات الواردة إلى Unicode والمستندات الصادرة إلى UTF-8.ليس عليك أن تفكر في الترميزات، إلا إذا كانت الوثيقة لا تحدد ترميزًا ولا يستطيع Beautiful Soup اكتشافه تلقائيًا.ثم عليك فقط تحديد الترميز الأصلي.

يقوم برنامج Beautiful Soup بتحليل أي شيء تقدمه له، ويقوم بمهمة اجتياز الشجرة نيابةً عنك.يمكنك إخبارها "البحث عن جميع الروابط" أو "البحث عن جميع الروابط الخاصة بالفئة ExternalLink" أو "البحث عن جميع الروابط التي تتطابق عناوين URL الخاصة بها مع"foo.com" أو "ابحث عن عنوان الجدول الذي يحتوي على نص غامق، ثم أعطه لي هذا النص."

استخدم HTML5 محلل مثل html5lib .

وعلى عكس مرتب HTML، وهذا سوف تعطيك خطأ التعامل مع قريبة جدا من ما تقوم به المتصفحات.

وهناك على المواضيع زوجين C # محددة في هذا الشأن، مثل تبحث عن محلل C # HTML .

واعتمادا على البيانات التي تحتاج إلى استخراج التعابير العادية قد يكون خيارا. أعرف أن الكثير من الناس قشعريرة في الفكر وباستخدام RegExes على البيانات المنظمة ولكن الحقيقة الواضحة هي (كما كنت قد اكتشفت) أن الكثير من HTML ليست في الواقع منظم بشكل جيد ويمكن أن يكون من الصعب جدا تحليل.

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

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