إزالة علامات تنسيق HTML من سلسلة في Python

hocine
Hocine Gasmi
Back-end Developer (Python/Django)
03/11/2022 |برمجة 💻
إزالة علامات تنسيق HTML من سلسلة في Python

إزالة علامات تنسيق الـ HTML من سلسلة باستعمال لغة البرمجة بايثون.

 

لتجريد علامات HTML من سلسلة في Python

  1. نستعمل الوحدة html.parser من HTMLParser.
  2. نقوم بتنفيذ الوضيفة (method) 'handle_data' للحصول على ما بين تنسيق الـ HTML.
  3. تخزين البيانات في قائمة على الكائن.
  4. استدعاء الوضيفة 'get_data ()'.

الكود:

from html.parser import HTMLParser


class MLRemover(HTMLParser):
    def __init__(self):
        super().__init__(convert_charrefs=False)
        self.reset()
        self.convert_charrefs = True
        self.fed = []

    def handle_data(self, data):
        self.fed.append(data)

    def handle_entityref(self, name):
        self.fed.append(f'&{name};')

    def handle_charref(self, name):
        self.fed.append(f'&#{name};')

    def get_data(self):
        return ''.join(self.fed)


def strip_html(value):
    remover = MLRemover()

    remover.feed(value)
    remover.close()
    return remover.get_data()


my_html = """
<div>
  <h2>مرحبا</h2>
  <div>على موقعنا</div>
  <div>المتن</div>
</div>
"""


print(strip_html(my_html))

# مرحبا
# على موقعنا
# المتن

يتم تمرير البيانات التي بين علامات HTML من المحلل اللغوي (parser) إلى الفئة المشتقة عن طريق استدعاء self.handle_data ().

عند ضبط convert_charrefs على True، يتم تحويل مراجع الأحرف تلقائيًا إلى حرف Unicode المقابل.

 

إذا تم ضبط convert_charrefs على False، يتم تمرير مراجع الأحرف عن طريق استدعاء الوضيفة self.handle_entityref () أو self.handle_charref ().

تستخدم الوضيفة 'get_data()' لجمع السلاسل بدون فاصلة بالـ 'str.join()'.

الدالة 'str.join' تأخذ iterable كتمرير ثم  تقوم بارجاع سلسلة حيث هي نتيجة السلاسل الممررة كـ iterable.

تأخذ الدالة strip_html () سلسلة تحتوي على علامات HTML وتزيلها.

def strip_html(value):
    remover = MLRemover()

    remover.feed(value)
    remover.close()
    return remover.get_data()


my_html = """
<div>
  <h2>مرحبا</h2>
  <div>على موقعنا</div>
  <div>المتن</div>
</div>
"""


print(strip_html(my_html))

# مرحبا
# على موقعنا
# المتن

تقوم الوظيفة هذه بإنشاء مثيل للفئة وتغذية السلسلة التي تحتوي على علامات html إلى المحلل اللغوي (parser).

الخطوة التالية هي استدعاء الوضيفة close () على الكائن (instance) لمعالجة أي بيانات مخزنة (buffered data).

أخيرًا، نقوم بنداء للوضيفة get_data () على المثيل لضم قائمة السلاسل في سلسلة واحدة لا تحتوي على أي علامات HTML.

 

 

إزالة علامات HTML من سلسلة باستخدام regex في بايثون

استخدم طريقة re.sub () لتجريد علامات HTML من سلسلة، على سبيل المثال

result = re.sub(r'<.*?>', '', html_string)

الوضيفة 're.sub ()' ستزيل جميع علامات HTML الافتتاحية والختامية عن طريق استبدالها بسلاسل فارغة.

import re

html_string = """
<div>
  <div>مرحبا</div>
  <h2>على موقعنا</h2>
  <h3>المتن</h3>
</div>
"""

result = re.sub(r'<.*?>', '', html_string)

# First
# Second
# Third

print(result)

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

الخاصية الأولى التي مررناها إلى طريقة re.sub () هي تعبيرregular expression.

يتطابق القوسان <و> مع أحرف الفتح والإغلاق لعلامة HTML.

النقطة . يطابق أي حرف باستثناء سطر جديد.

تتطابق العلامة النجمية * مع 0 أو أكثر من التكرار للحرف السابق (أي حرف).

إضافة علامة استفهام ؟ بعد أن يجعله المؤهل يؤدي اداء غير جشع (non-greedy) أو الى أدنى حد من التطابق.

على سبيل المثال، استخدام (regular expression) التعبير العادي <. *؟> سيطابق فقط <a>.

 

نتمنى ان يكون هذا المقال مفيد, اذا كان لديك اي اضافة سنكون سعداء اذا شاركتها معنا في التعليقات.

 

 

 

تذكر أن المساهمات في هذا الموضوع يجب أن تتبع إرشادات المجتمع.


التعليقات:

    لا توجد تعليقات بعد.