2017-12-01 2 views
2

Also, ich möchte die Alben und Lieder von dieser Seite mit Beautiful Suppe kratzen. Das HTML sieht wie folgt aus: Album::Extrahieren von HTML-Text zwischen Elementen

<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> 

ich diesen extrahieren möchten 3 Feet High And Rising Songs: Intro, die magische Zahl, Veränderung In Speak

ich damit die Alben bekam:

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

Ich kann nicht herausfinden, wie man die Lieder bekommt. Ich habe diese versucht:

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

Irgendwelche Ideen?

Antwort

0

Versuchen Sie es. Ich hoffe, es wird holen Sie die gewünschte Ausgabe:

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()) 

Was es produziert:

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

Intro 
The Magic Number 
Change In Speak 
+0

, das funktioniert. Vielen Dank. Ein paar Fragen: 1) Woher wussten Sie, BeautifulSoup (html_content, "lxml") zu verwenden? 2) Wie funktioniert supp.select hier? Ist das zweite Argument "#listAlbum a" auf das "a" in "a href" bezogen? – pierce

+0

Ihre erste Frage ist unklar. Wie für Ihre zweite Frage: 'suppen.select' funktioniert wie css Selektoren tut. Vielleicht möchten Sie diese Dokumentation [BeautifulSoup] (https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors) durchgehen. Und was deine letzte Frage betrifft: Nein, dieses '#' bezieht sich nicht auf a. Das ist das Symbol von 'ID', also bezieht es sich auf 'id = "listAlbum" '. Achten Sie darauf, dies als eine Antwort zu markieren. Vielen Dank. – SIM

0

Hier ist ein weiterer Ansatz:

## 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()) 
Verwandte Themen