إياد أحمد نشر 24 نوفمبر 2021 أرسل تقرير نشر 24 نوفمبر 2021 أثناء استخلاص بعض البيانات من مواقع الويب، يكون هناك بعض الوسوم الفارغة، على سبيل المثال كما في المستند التالي: <p> <p></p> <strong>some<br>text<br>here</strong></p> لذا كيف يمكنني معالجة هكذا حالات؟ أو بمعنى آخر كيف يمكننا حذف هذه الوسوم؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 24 نوفمبر 2021 أرسل تقرير نشر 24 نوفمبر 2021 يمكنك القيام بذلك بالشكل التالي: # استيراد الوحدات اللازمة from bs4 import BeautifulSoup # المستند الخاص بك htmlDoc = """ <p> <p></p> <strong>some<br>text<br>here</strong></p> """ # BeautifulSoup تحليل النص الذي تم الحصول عليه من خلال soup = BeautifulSoup(htmlDoc, 'lxml') # الآن نقوم بالمرور على كل الوسوم for x in soup.find_all(): # نقوم بجلب النص من الوسم وإزالة المسافات الفارغة # وبعد محو المسافات الفارغة نتحقق فيما إذا كان طوله يساوي 0 # في حالة أصبح طوله 0 نقوم بحذف الوسم if len(x.get_text(strip=True)) == 0: x.extract() # طباعة النتيجة print(soup) /* <html><body> <strong>sometexthere</strong> </body></html> */ 1 اقتباس
1 سامح أشرف نشر 25 نوفمبر 2021 أرسل تقرير نشر 25 نوفمبر 2021 تستطيع تحديد ما إذا كان العنصر فارغًا أم لا من خلال الخاصية contents الخاصة به، وبالتالي يمكننا المرور على كل عناصر الصفحة عبر التابع find_all والتحقق مما إذا كان العنصر فارغ أم لا: def checkEmpty(tag): return not tag.contents and not tag.name == 'br' # يقبل التابع find_all تمرير دالة له [tag.decompose() for tag in soup.find_all(checkEmpty)] لكن إن أحتوى العنصر على بعض المسافات فسوف يتم تخطيه ولن يتم حذف، لذلك يمكن أن نغير في الكود السابق ليتم حذف العناصر التي تحتوي على مسافات فقط في داخلها: from bs4 import BeautifulSoup content = """ <p> <p></p> <strong>some<br>text<br>here</strong> </p> """ soup = BeautifulSoup(content, features='lxml') def checkEmpty(tag): return (not tag.contents or len(tag.get_text(strip=True)) <= 0) and not tag.name == 'br' # إزالة كل العناصر الفارغة [tag.decompose() for tag in soup.find_all(checkEmpty)] print(soup) """ <html><body> <strong>some<br/>text<br/>here</strong> </body></html> """ لاحظ أن عنصر p لا يجوز أن يحتوي على عنصر p آخر في داخله، لذلك تقوم مكتبة BeautifulSoup بإغلاق العناصر تلقائيَا،و يتم تحويل المستند إلى هذا الشكل: <html><body><p> </p><p></p> <strong>some<br/>text<br/>here</strong> </body></html> وبالتالي سيتم حذف العنصر p الأول والثاني وسيتبقى فقط العنصر strong داخل جسم الصفحة 1 اقتباس
السؤال
إياد أحمد
أثناء استخلاص بعض البيانات من مواقع الويب، يكون هناك بعض الوسوم الفارغة، على سبيل المثال كما في المستند التالي:
لذا كيف يمكنني معالجة هكذا حالات؟ أو بمعنى آخر كيف يمكننا حذف هذه الوسوم؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.