اذهب إلى المحتوى

السؤال

نشر

أقوم باستخراج بعض البيانات من إحدى صفحات الويب، وقد قمت بتحليل إحدى أكواد ال HTML بالشكل التالي:

spage = bs(urlopen(URL))
b = spage.body.find('div', 'class'='badges')
print(b)
# حصلت على الخرج التالي:
"""
<span>
<span title="9 gold badges"><span class="badge1"></span>
<span class="badgecount">9</span></span>
<span title="38 silver badges"><span class="badge2"></span>
<span class="badgecount">38</span></span><span title="56 bronze badges"><span class="badge3"></span>
<span class="badgecount">56</span></span></span>

"""

الآن أريد استخراج 56 bronze badges و 9 gold badges و 38 silver badges منها؟

Recommended Posts

  • 0
نشر

تابع في الكود التالي:

#استيراد الوحدة
from bs4 import BeautifulSoup
# html كود 
htmlDoc = """<div class="badges">
<span>
    <span title="9 gold badges"><span class="badge1"></span><span class="badgecount">9</span></span>
    <span title="38 silver badges"><span class="badge2"></span><span class="badgecount">38</span></span>
    <span title="56 bronze badges"><span class="badge3"></span><span class="badgecount">56</span></span>
</span>
</div>"""
# تحليله
soup = BeautifulSoup(htmlDoc,'lxml')
# ومن خلاله نستخدم body نقوم بالوصول إلى الوسم soup الآن من خلال كائن
# badges ذو الكلاس div للإمساك بال find الدالة  
b = soup.body.find('div', attrs={'class': 'badges'})
# الموجودة ضمنه span الآن من خلاله نقوم بإيجاد كل ال
spans=b.span.find_all('span', recursive=False)
# الآن نقوم بالمرور عليها واحداً تلو الآخر
for span in spans :
		# ضمنها والذي يحوي على المطلوب title طباعة محتوى ال
    print (span.attrs['title'])
"""
9 gold badges
38 silver badges
56 bronze badges
"""

 

  • 0
نشر

يمكنك أن تقوم بالمرور على كل عناصر span الموجودة في المستند والتأكد من إحتوائه على الخاصية title، وفي حالة وجود هذه الخاصية سيتم إضافة قيمتها إلى قائمة badges:
 

from bs4 import BeautifulSoup
content = """
<span>
  <span title="9 gold badges">
    <span class="badge1"></span>
    <span class="badgecount">9</span>
  </span>
  <span title="38 silver badges">
    <span class="badge2"></span>
    <span class="badgecount">38</span>
  </span>
  <span title="56 bronze badges">
    <span class="badge3"></span>
    <span class="badgecount">56</span>
  </span>
</span>
"""

soup = BeautifulSoup(content, features='lxml')

# هنا سيم تخزين كل القيم المستخرجه من عناصر span
badges = []

# نقوم بتحديد كل عناصر span والمرور عليهم
span_elements = soup.select('span')
for span in span_elements:
  # في حالة وجود الخاصية title
  if span.has_attr('title'):
    badges.append(span.get('title'))

print(badges) # ['9 gold badges', '38 silver badges', '56 bronze badges']

لاحظ أن كل القيم تنتهي بالكلمة "badges"، وبالتالي يمكنك أن تتأكد من صحة القيمة الموجودة في الخاصية title، على النحو التالي:
 

for span in span_elements:
  if span.has_attr('title'):
    
    title = span.get('title')
    if title.lower().endswith('badges'):
      badges.append(title)

print(badges) # ['9 gold badges', '38 silver badges', '56 bronze badges']

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...