как при парсинге BS4 получить только родителя

Рейтинг: 0Ответов: 1Опубликовано: 29.03.2023
<div class="friend_block_content">Kastunaka Double Kill<br>
    <span class="friend_small_text">
        <span class="friend_game_link">Dota 2</span>
    </span>
</div>

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

user_names = soup.find_all(class_="friend_block_content")

Проблема так же заключается в том, что в результате нужен список никнеймов. И просто метод find() тут не пройдет.

Ответы

▲ 0Принят

Можно вытащить никнеймы с помощью списка дочерних элементов .contents, взяв первый нужный вам элемент.

from bs4 import BeautifulSoup as Soup

xml_content = """
<div class="friend_block_content">Kastunaka Int Kill<br>
    <span class="friend_small_text">
        <span class="friend_game_link">Dota 2</span>
    </span>
</div>
<div class="friend_block_content">Kastunaka Double Kill<br>
    <span class="friend_small_text">
        <span class="friend_game_link">Dota 2</span>
    </span>
</div>
<div class="friend_block_content">Kastunaka Float Kill<br>
    <span class="friend_small_text">
        <span class="friend_game_link">Dota 2</span>
    </span>
</div>"""


soup = Soup(xml_content, 'lxml')
user_names = soup.find_all(class_="friend_block_content")
nick_names = [user_name.contents[0] for user_name in user_names]
print(nick_names)

---------------------------------

['Kastunaka Int Kill', 'Kastunaka Double Kill', 'Kastunaka Float Kill']