Извлечение html текста между элементами


Итак, я хочу соскрести альбомы и песни с этого сайта с красивым супом. HTML выглядит следующим образом:

<div id="listAlbum"> 
    <a id="19215"></a>
    <div class="album">
    "album: "
    <b>"3 Feet High And Rising"</b> == $0
    " (1989)"
  </div> 
  <a href="https://www.azlyrics.com/lyrics/delasoul/intro.html" target="_blank">Intro
  </a>
  <br> 
  <a href="https://www.azlyrics.com/lyrics/delasoul/themagicnumber.html" target="_blank">The Magic Number</a>
  <br> 
  <a href="https://www.azlyrics.com/lyrics/delasoul/changeinspeak.html" target="_blank">Change In Speak</a>
  <br> 

Я хочу извлечь это: Альбом: 3 Фута Высотой И Поднимающийся Песни: Вступление, Магическое Число, Изменение В Разговоре

Я получил альбомы с этим:

allAlbums = soup.findAll('div', {"class" : "album"})
for a in allAlbums:
    albumName = str(a.text)[7:]
    print('album: ' + str(a))

Я не могу понять, как получить песни. Я пробовал их:

for s in soup(text = re.compile(r'target="_blank">')):
    print(s.parent)

Есть идеи?

2 2

2 ответа:

Попробуйте это. Я надеюсь, что это принесет вам необходимый результат:

from bs4 import BeautifulSoup

html_content='''
  <div id="listAlbum">
   <a id="19215">
   </a>
   <div class="album">
    "album: "
    <b>
     "3 Feet High And Rising"
    </b>
    == $0
    " (1989)"
   </div>
   <a href="https://www.azlyrics.com/lyrics/delasoul/intro.html" target="_blank">
    Intro
   </a>
   <br/>
   <a href="https://www.azlyrics.com/lyrics/delasoul/themagicnumber.html" target="_blank">
    The Magic Number
   </a>
   <br/>
   <a href="https://www.azlyrics.com/lyrics/delasoul/changeinspeak.html" target="_blank">
    Change In Speak
   </a>
   <br/>
  </div>
'''
soup = BeautifulSoup(html_content,"lxml")
for item in soup.select("#listAlbum .album,#listAlbum a"):
    print(item.text.strip())

Что она производит:

"album: "
"3 Feet High And Rising"   
== $0
" (1989)"

Intro
The Magic Number
Change In Speak

Вот еще один подход:

## Prints every album
albums = soup.find_all(class_="album")
for album in albums:
    print(album.get_text())

## Prints every song
songs = soup.find_all('a', target="_blank")
for song in songs:
    print(song.get_text())