إياد أحمد نشر 21 نوفمبر 2021 أرسل تقرير نشر 21 نوفمبر 2021 كيف يمكننا البحث عن نص معين داخل tag معين. على سبيل المثال البحث عن أي نص يحوي كلمة دورة ضمن الوسم h وإرجاع هذا ال tag؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 21 نوفمبر 2021 أرسل تقرير نشر 21 نوفمبر 2021 (معدل) يمكنك اتباع الخطواط التالية: أولاً: استيراد الوحدات اللازمة وهما bs4 و request. ثانياُ: تحديد الصفحة الهدف وإرسال طلب GET. ثالثاً: تحديد ال tag المطلوب واستخدام الدالة findall لإيجاده. رابعاً: تحديد النص الهدف. خامساً: للبحث عن نص داخل ال tag، نحتاج إلى التحقق من شرط الاحتواء بمساعدة ال string function، حيث أن ال string function ستُرجع النص الموجود داخل ال tag. وبالتالي نختبر احتواءه ونطبعه في حالة تحقق الشرط. كما في الكود التالي: # استيراد الوحدات from bs4 import BeautifulSoup import requests # https://academy.hsoub.com/ # تحديد رابط الموقع الهدف url = 'https://academy.hsoub.com/learn/computer-science/' # للصفحة GET إرسال طلب page = requests.get(url) # soup وإنشاء كائن BeautifulSoup تحليل مكونات الصفحة من خلال soup = BeautifulSoup(page.content, "html.parser") # والبحث عنه tag تحديد ال child_soup = soup.find_all('h2') # تحديد النص المطلوب text = 'دورة علوم الحاسوب' # سنبحث في العلامة التي يتطابق فيها النص مع النص المحدد for i in child_soup: if(i.string in text): print(i) # الخرج: # <h2 class="no-margin clr-white font-bold">دورة علوم الحاسوب</h2> في الكود السابق استخدمت حلقة for للبحث عن النص. وكحل بديل يمكنك استخدام lambda: # استيراد الوحدات from bs4 import BeautifulSoup import requests # تحديد رابط الموقع الهدف url = 'https://wiki.hsoub.com/?utm_source=academy.hsoub.com&utm_medium=Links&utm_campaign=HsoubFooter' # للصفحة GET إرسال طلب page = requests.get(url) # soup وإنشاء كائن BeautifulSoup تحليل مكونات الصفحة من خلال soup = BeautifulSoup(page.content, "html.parser") # النص text = 'Python' TAG="a" # عملية البحث نفسها لكن من خلال لمدا res = soup.find_all(lambda tag: tag.name == TAG and text in tag.text) # طباعة النتيجة print(res) # [<a href="/Python" title="Python">Python</a>] تم التعديل في 21 نوفمبر 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
1 سامح أشرف نشر 22 نوفمبر 2021 أرسل تقرير نشر 22 نوفمبر 2021 في BeautifulSoup يمكن إستخدام التابع find أو find_all للبحث عن عنصر معين من خلال تمرير دالة كمعامل لهذا التابع، كالتالي: import requests from bs4 import BeautifulSoup def check_content(tag): return tag.name=="h2" and "دورة" in tag.get_text() user_input_url = 'https://academy.hsoub.com/store/c1-%D8%AF%D9%88%D8%B1%D8%A7%D8%AA-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D9%8A%D8%A9/' website_content = requests.get(user_input_url.strip()).text soup = BeautifulSoup(website_content, features='lxml') print(soup.find_all(check_content)) # سيتم طباعة قائمة من العناصر التي تحتوي على كلمة 'دورة' في داخلها لاحظ أن الدالة check_content يجب أن تقوم بإرجاع قيمة منطقية Boolean الفرق بين find و find_all هو أن التابع find سقوم بإرجاع أول عنصر يجده، بينما التابع find_all سوف يقوم بإرجاع كل العناصر التي تنطبق عليها الشروط. أيضًا يمكن إستعمال الأنماط التعبيرية regular expression للبحث عن النصوص بطريقة متقدمة أكثر، كالتالي: import requests from bs4 import BeautifulSoup import re user_input_url = 'https://academy.hsoub.com/store/c1-%D8%AF%D9%88%D8%B1%D8%A7%D8%AA-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D9%8A%D8%A9/' website_content = requests.get(user_input_url.strip()).text soup = BeautifulSoup(website_content, features='lxml') h2_elements = soup.find_all('h2') # تحديد كل عناصر h2 # سنتحقق من محتوى كل عنصر من عناصر h2 التي تم تحديدها for element in h2_elements: if element.find_all(text=re.compile("دورة")): # إن كان محتوى العنصر يحتوي على الكلمة دورة print(element) 1 اقتباس
السؤال
إياد أحمد
كيف يمكننا البحث عن نص معين داخل tag معين. على سبيل المثال البحث عن أي نص يحوي كلمة دورة ضمن الوسم h وإرجاع هذا ال tag؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.