как при парсинге BS4 получить только родителя
<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() тут не пройдет.
Ответы (1 шт):
Автор решения: Сергей Кох
→ Ссылка
Можно вытащить никнеймы с помощью списка дочерних элементов .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']