التصنيفات
الترميز

طرق مختلفة لتحليل Python BeautifulSoup

أثناء دراسة Python ، حاولت تنظيم طرق مختلفة للحصول على علامات محددة من مستندات html.

كود مثال HTML

بافتراض وجود مستند HTML على النحو التالي ، دعنا نرى كيفية تحليل علامات معينة باستخدام وحدة BeautifulSoup واحدة تلو الأخرى.

from bs4 import BeautifulSoup

html = """
<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <span class='test1'>Content1</span>
        <div class='test1'>Content2</div>
        <div class='test1' id='target' name='sangminem'>Goal</div>
        <div class='test2'>Content3</div>
    </body>
</html>
"""

soup = BeautifulSoup(html, "html.parser")

الهدف هو العلامة أدناه.

<div class='test1' id='target' name='sangminem'>Goal</div>

استخدم طريقة البحث ()

print(soup.find('div',id='target')) #tag, id
print(soup.find('div',attrs={'id':'target'})) #tag, id as attribute value
print(soup.find('div',attrs={'name':'sangminem'})) #tag, name as attribute value
print(soup.find(attrs={'name':'sangminem'})) #name as attribute value
print(soup.find(attrs={'id':'target'})) #id as attribute value

هنا هو الإخراج.

<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>

استخدم طريقة find_all ()

print(soup.find_all('div')[1]) #tag
print(soup.find_all('div',class_=['test1'])[1]) #tag, class
print(soup.find_all('div',id='target')[0]) #tag, id
print(soup.find_all('div',attrs={'class':'test1'})[1]) #tag, class as attribute value
print(soup.find_all('div',attrs={'id':'target'})[0]) #tag, id as attribute value
print(soup.find_all('div',attrs={'name':'sangminem'})[0]) #name as attribute value
print(soup.find_all(class_=['test1'])[2]) #class
print(soup.find_all(id='target')[0]) #id
print(soup.find_all(attrs={'class':'test1'})[2]) #class as attribute value
print(soup.find_all(attrs={'id':'target'})[0]) #id as attribute value
print(soup.find_all(attrs={'name':'sangminem'})[0]) #name as attribute value

هنا هو الإخراج.

<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>

استخدم طريقة select_one ()

print(soup.select_one('div.test1#target')) #tag, class, id
print(soup.select_one('div#target')) #tag, id
print(soup.select_one('.test1#target')) #class, id
print(soup.select_one('#target')) #id

هنا هو الإخراج.

<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>

استخدم طريقة التحديد ()

print(soup.select('.test1')[2]) #class
print(soup.select('div.test1')[1]) #tag, class
print(soup.select('div.test1#target')[0]) #tag, class, id
print(soup.select('div#target')[0]) #tag, id
print(soup.select('.test1#target')[0]) #class, id
print(soup.select('#target')[0]) #id

هنا هو الإخراج.

<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>
<div class="test1" id="target" name="sangminem">Goal</div>

طريقة find () وطريقة select_one () تحصل على نتيجة واحدة.

إذا كانت هناك عدة نتائج تفي بالشرط ، فسيتم استرداد القيمة الأولى فقط.

يحصل التابعان find_all () و select () على جميع النتائج التي تفي بالشرط في شكل مصفوفة.

لذلك ، من أجل الحصول على القيمة المطلوبة في النهاية ، يجب ألا تحذف فهرس الصفيف.

إذا كان من الصعب تحديد الطريقة التي يجب استخدامها نظرًا لوجود طرق مختلفة ، نوصي باستخدام طريقة select ().

إنه سهل الاستخدام ويوزع فعليًا بشكل أسرع.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

arالعربية