Как парсить используя библиотеку BeautifulSoup4 Python
<div class="soundTitle sc-clearfix sc-hyphenate sc-type-h2 sc-text-h4 streamContext m-interactive"><div class="soundTitle__titleContainer">
<div class="soundTitle__playButton">
<a role="button" href="" class="snippetUXPlayButton sc-button-play playButton sc-button sc-button-xlarge" tabindex="0" title="Play" draggable="true">Play</a>
</div>
<div class="soundTitle__usernameTitleContainer">
<div class="sc-type-light sc-text-secondary sc-text-h4 soundTitle__secondary">
<a href="/gracedaviesofficial" class="soundTitle__username sc-link-secondary
sc-link-light">
<span class="soundTitle__usernameText">
Grace Davies
</span>
</a>
</div>
<a class="sc-link-primary soundTitle__title sc-link-dark sc-text-h4" href="/gracedaviesofficial/hello-adele">
<span class="">Hello - Adele</span>
</a>
</div>
<div class="soundTitle__additionalContainer sc-ml-1.5x">
<div class="soundTitle__uploadTime sc-mb-0.5x">
<time class="relativeTime" title="Posted on 26 October 2015" datetime="2015-10-26T14:51:09.000Z"><span class="sc-visuallyhidden">Posted 6 years ago</span><span aria-hidden="true">6 years ago</span></time>
</div>
<div class="soundTitle__tagContainer">
<span class="sc-snippet-badge sc-selection-disabled sc-snippet-badge-medium sc-snippet-badge-grey sc-hidden"></span>
<span class="sc-snippet-badge sc-selection-disabled sc-snippet-badge-small sc-snippet-badge-grey sc-hidden"></span>
<a class="sc-tag soundTitle__tag sc-tag-small" href="/tags/hello"><span class="sc-truncate sc-tagContent">hello</span></a>
</div>
</div>
</div>
</div>
Как мне получить span с Названием песни, и href из тега a в который вложен этот span.
Пробовал использовать find_all('a', attrs={'название класса':'значение класса'}[0].get('href') но получил ошибку index out of range. То есть элемент не нашелся
Span тоже не знаю как получить Класса у него нету
Ответы (2 шт):
Автор решения: Alexandr
→ Ссылка
Примерно так:
a = soup.find('div' , {'class' : 'soundTitle__usernameTitleContainer'}).find_all('a')
for item in a:
href = item['href']
title = item.find('span').text
Ошибка 'index out of range' говорит о том, что в вашем списке нет элемента с таким индексом.
Автор решения: Battrip
→ Ссылка
from bs4 import BeautifulSoup
html = """
<div class="soundTitle sc-clearfix sc-hyphenate sc-type-h2 sc-text-h4 streamContext m-interactive">
<div class="soundTitle__titleContainer">
<div class="soundTitle__playButton">
<a role="button" href=""
class="snippetUXPlayButton sc-button-play playButton sc-button sc-button-xlarge"
tabindex="0" title="Play" draggable="true">Play</a>
</div>
<div class="soundTitle__usernameTitleContainer">
<div class="sc-type-light sc-text-secondary sc-text-h4 soundTitle__secondary">
<a href="/gracedaviesofficial" class="soundTitle__username sc-link-secondary sc-link-light">
<span class="soundTitle__usernameText">
Grace Davies
</span>
</a>
</div>
<a class="sc-link-primary soundTitle__title sc-link-dark sc-text-h4" href="/gracedaviesofficial/hello-adele">
<span class="">Hello - Adele</span>
</a>
</div>
<div class="soundTitle__additionalContainer sc-ml-1.5x">
<div class="soundTitle__uploadTime sc-mb-0.5x">
<time class="relativeTime" title="Posted on 26 October 2015" datetime="2015-10-26T14:51:09.000Z">
<span class="sc-visuallyhidden">Posted 6 years ago</span><span aria-hidden="true">6 years ago</span>
</time>
</div>
<div class="soundTitle__tagContainer">
<span class="sc-snippet-badge sc-selection-disabled sc-snippet-badge-medium sc-snippet-badge-grey sc-hidden"></span>
<span class="sc-snippet-badge sc-selection-disabled sc-snippet-badge-small sc-snippet-badge-grey sc-hidden"></span>
<a class="sc-tag soundTitle__tag sc-tag-small" href="/tags/hello">
<span class="sc-truncate sc-tagContent">hello</span>
</a>
</div>
</div>
</div>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
# Находим тег <a> с классом 'soundTitle__title'
a_tag = soup.find('a', class_='soundTitle__title')
# Извлекаем текст из вложенного тега <span>
span_text = a_tag.span.get_text(strip=True)
# Получаем значение атрибута href из тега <a>
href_value = a_tag.get('href')
print(f"Название песни: {span_text}")
print(f"Ссылка (href): {href_value}")