طريقة بيثون لاستخراج المحتوى (باستثناء الملاحة) من صفحة HTML

StackOverflow https://stackoverflow.com/questions/796490

سؤال

بالطبع يمكن تحليل صفحة HTML باستخدام أي عدد من محلل Python، لكنني فوجئت أنه لا يبدو أن هناك أي نصوص علنية تحليلها لاستخراج محتوى مغزى (باستثناء الشريط الجانبي والملاحة، إلخ) من مستند HTML معين وبعد

أنا أظن أنه شيء من هذا القبيل جمع عناصر DIV و P ثم التحقق منهم للحصول على الحد الأدنى من المحتوى النصي، لكنني متأكد من أن التنفيذ الصلب سيتضمن الكثير من الأشياء التي لم أفكر فيها.

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

المحلول

جرب ال حساء جميل مكتبة لبثون. لديها طرق بسيطة للغاية لاستخراج المعلومات من ملف HTML.

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

هل كان هناك نوع معين من المعلومات التي كنت تحاول استخراجها أو بعض الأهداف الأخرى؟

يمكنك محاولة استخراج أي محتوى في علامات "DIV" و "P" ومقارنة الأحجام النسبية لجميع المعلومات الموجودة في الصفحة. المشكلة إذن هي أن الأشخاص ربما يقومون بتجميع المعلومات في مجموعات من "Div's و" P's (أو على الأقل يفعلون إذا قاموا بالكتابة بشكل جيد HTML!).

يمكن DIV 'الذي يتضمن ما يبدو أن غالبية المعلومات ..؟

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

+1 points for every 100 words
+1 points for every child element that has > 100 words
-1 points if the section name contains the word 'nav'
-2 points if the section name contains the word 'advert'

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

edit2 النظر إلى قابلية القراءة، يبدو أن تفعل الكثير تماما ما اقترحته للتو! ربما يمكن تحسينه لمحاولة فهم الجداول بشكل أفضل؟

نصائح أخرى

إلقاء نظرة على TemplateMaker: http://www.holovaty.com/writing/templatemaker/

انها مكتوبة من قبل أحد مؤسسي django. تعمل بشكل أساسي على إطعامها بعض ملفات HTML مثال وسوف تولد "قالب" يمكنك استخدامها بعد ذلك لاستخراج البتات المختلفة المختلفة (والتي عادة ما تكون المحتوى المجدي الوحدي).

هنا مثال من صفحة Google Code.:


# Import the Template class.
>>> from templatemaker import Template

# Create a Template instance.
>>> t = Template()

# Learn a Sample String.
>>> t.learn('<b>this and that</b>')

# Output the template so far, using the "!" character to mark holes.
# We've only learned a single string, so the template has no holes.
>>> t.as_text('!')
'<b>this and that</b>'

# Learn another string. The True return value means the template gained
# at least one hole.
>>> t.learn('<b>alex and sue</b>')
True

# Sure enough, the template now has some holes.
>>> t.as_text('!')
'<b>! and !</b>'

قد تستخدم boilerpipe تطبيق الويب لجلب واستخراج المحتوى على الطاير.

(هذا غير محدد لبثون، كما تحتاج فقط إلى إصدار طلب الحصول على طلب HTTP إلى صفحة على Google Appengine).

هتافات،

مسيحي

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

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

إذا كنت ترغب في القيام بذلك، انتقل مع RegexP <p></p>, أو تحليل دوم.

بجعة هي مجرد مكتبة لهذه المهمة. اقتباس README:

سيحاول أوزة استخراج المعلومات التالية:

  • النص الرئيسي للمادة
  • الصورة الرئيسية للمادة
  • أي أفلام يوتيوب / Vimeo مضمنة في المقالة
  • ميتا الوصف
  • العلامات الفوقية
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top