Seite 1 von 1

Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 10:09
von Mike Place
Hallo,

kann mir mal jemand über die Straße helfen? ;-) Leider finde ich keine Lösung.

Ich habe einen html_Text als String. Dort habe ich die Tags "name">, "rating"> und position">. Ich möchte den Text dahinter bist zum schliessenden </div auslesen.
Das funktioniert soweit einmal:

name = str(html_text).split('name">')[1].split("</div")[0]
position = str(html_text).split('position">')[1].split("</div")[0]
rating = str(html_text).strip().split('rating">')[1].split("</div")[0]

Wie kann ich das solange mit einer Schleife durchlaufen lassen, dass ich alle Texte von allen Tags erhalte?

Ein Ausschnitt des html_text lautet:

div><div class="playStyle chemstyle250" style="color: rgb(68, 58, 34);"></div></div><div class="name">]Kulusevski</div<div class="rating">82</div><div class="position">RM</div</div></div><div class="playStyle chemstyle250" style="color: rgb(70, 57, 12);"></div></div><div class="name">Correa</div<div class="rating">78</div><div class="position">LF</div<div class="name">Piatti</div<div class="rating">81</div><div class="position">IV</div></div


Vielen Dank für Eure Antworten.
Gruß Michael

Re: Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 10:17
von sparrow
HTML parst man mit einer darauf spezialisierten Bibliothek. In der Regel mit beautifulsoup.

Re: Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 10:31
von Sirius3
Dafür benutzt man den passenden Selector:

Code: Alles auswählen

import bs4

html_text = '<div><div class="playStyle chemstyle250" style="color: rgb(68, 58, 34);"></div></div><div class="name">]Kulusevski</div<div class="rating">82</div><div class="position">RM</div</div></div><div class="playStyle chemstyle250" style="color: rgb(70, 57, 12);"></div></div><div class="name">Correa</div<div class="rating">78</div><div class="position">LF</div<div class="name">Piatti</div<div class="rating">81</div><div class="position">IV</div></div>'

html = bs4.BeautifulSoup(html_text)
name_div = html.find("div", class_="name")

Re: Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 11:06
von Mike Place
Danke für Eure Antworten. Das auslesen funktioniert ja. Beautifulsoup ist auch eine Alternative.

Mir geht es darum, wie ich mit einer Schleife alle Tags als Ergenis in einer Liste bekomme. Also sowas wie "for"-Schleife.

Re: Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 11:25
von sparrow
Dafür stellt beautifulsoup die entsprechenden Methoden bereit. find_all stat find zum Beispiel.

Re: Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 11:45
von Sirius3
Was hast Du als Input, was möchtest Du als Output, und wo kommst Du konkret nicht weiter?

Re: Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 12:50
von Mike Place
Danke für Eure Antworten.

Habe es jetzt mit beautifulsoap4 gelöst. Mit - name = list(html.findAll('div', class_="name")) - kann ich alle vorkommende Tags "name" auslesen.
Ich erhalte zwar:
<div class="name">]Kulusevski</div> , aber das Überflüssige kann ich dann mit split löschen.

name_list = []
for i in range(3):
name_1 = str(name).split('name">')[1].split("</div")[0]
name_list.append(name_1)

Re: Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 12:58
von sparrow
Warum liest du dir nicht mal die Dokumentation von Beautifulsoup durch? Warum greifst du nicht auf den Text der Tags zu, wie es dort beschrieben ist?
Warum iterierst du in der for-Schleife über die Zahlen 0 bis 3, vewendest die aber nicht?

names = [tag.string for tag in html.find_all('div', class_="name")]

Edit: Methoden angepasst.

Re: Iteration über einen String

Verfasst: Montag 26. Oktober 2020, 13:09
von Sirius3
Und warum verwendest Du nicht die aktuelle API, find_all, statt dem veralteten findAll? Aber vielleicht ist das bei Soap ja anders.