как различать html элементов с одинаковым именем класса - PullRequest
0 голосов
/ 12 июля 2020

Эй, я пытаюсь получить содержимое классной медали, которая является классом золота, но когда я набираю ее как классовую медаль, я также получаю содержимое серебра и бронзы, как я могу получить содержимое только первого класса. Ниже приведен код html

<ul class="table2 ajax-content">
<ul class="medal-box">
<li>
<div class="medal"> <span>G</span> <span class="num">0</span> </div>
</li>
<li>
<div class="medal silver"> <span>S</span> <span class="num">0</span> </div>
</li>
<li>
<div class="medal bronze"> <span>B</span> <span class="num">1</span> </div>
</li>
</ul>
</div>
</div>
</li>
<li>
<ul class="medal-box">
<li>
<div class="medal"> <span>G</span> <span class="num">0</span> </div>
</li>
<li>
<div class="medal silver"> <span>S</span> <span class="num">0</span> </div>
</li>
<li>
<div class="medal bronze"> <span>B</span> <span class="num">1</span> </div>
</li>
</ul>
</div>
</div>
</li>
</ul>

ниже приведен код python, пытающийся очистить медаль

seasons =  results.find_all(class_='medal-box')
    silvers =  results.find_all(class_='medal silver')
    for silver in silvers:
        num_silver =siver.find(class_="num").get_text()
        print(num_silver)
    bronzes =  results.find_all(class_='medal bronze')
    for bronze in bronzes:
        num_bronze =bronze.find(class_="num").get_text()
        print(num_bronze)
        k = len(bronzes)
    golds =  results.find_all(class_='medal')
    for gold in golds:
        num_gold =gold.find(class_="num").get_text()
        print(num_gold)
    ~~~
here is what am getting 
0
0
1
1
0
0
1
0
0
1
instead of getting
0
0
1
1
0
0

    

1 Ответ

1 голос
/ 12 июля 2020

Вы должны перебирать один из элементов medal_boxes вместо всего супа. Я переписал ваш код.

from bs4 import BeautifulSoup
soup = BeautifulSoup('content_of_page')

medal_boxes = soup.find_all('ul', class_ = 'medal-box')

for i in medal_boxes:
    mmedal = i.find('div', class_ = 'medal')
    medal_silver = i.find('div', class_ = 'medal silver')
    medal_bronze = i.find('div', class_ = 'medal bronze')
    

Чтобы получить текст из этого класса, вы можете использовать .text или .get_text()

...