Python Wort was zwischen zwei anderen ist im String ausgeben?
Hallo,
ich habe einen String mit folgenden Inhalt:
<font rwr="1" size="4" style="font-family:Arial"><font face="Arial"><span style="font-size: 18.6667px;">Edelrost Garten Feuerschale Pflanzenschale Rost aus Metall mit Konus Blumen </span></font><div><font face="Arial"><span style="font-size: 18.6667px;">
Hier möchte ich als Ausgabe "Edelrost Garten Feuerschale Pflanzenschale Rost aus Metall mit Konus Blumen " haben.
Allerdings ist es wichtig, dass ich den Text zwischen dem HTML Teil bekomme, da der HTML Teil immer gleich bleibt, sich der Text aber ändert.
Es kann z.B. auch jederzeit so aussehen:
<font rwr="1" size="4" style="font-family:Arial"><font face="Arial"><span style="font-size: 18.6667px;">Meine Freundin ließt gern Bücher </span></font><div><font face="Arial"><span style="font-size: 18.6667px;">
In diesem Beispiel hätte ich gern mit dem gleichen Code "Meine Freundin ließt gern Bücher" raus.
Wie mache ich das?
Danke im Voraus!
LG
Niklas
PS: Wenn mein Ansatz falsch ist (ich mache es mit BeautifulSoup) gerne schreiben wie ich es richtig mache, da ich mit den soup.find commands nicht wirklich vertraut bin.
4 Antworten
BeautifulSoup erlaubt es dir, nur den Text auszulesen, ohne diese ganzen HTML-Tags aussenrum.
Dafür gibt es das Attribut text
Eventuell reicht es schon, bei deinem aktuellen Codestück (mit dem du obigen String bekommst) einfach ein .text anzuhängen.
Zum Beispiel
soup.find('div', {'class' :'abc'}).text
anstatt
soup.find('div', {'class' :'abc'})
Probier das mal, und wenn es nicht klappt, dann schick mir mal das Code-Stück.
Naja, den String in der Fragestellung hast du ja schon
ich habe einen String mit folgenden Inhalt:
<font rwr="1" size="4" style="font-family:Arial"><font face="Arial"><span style="font-size: 18.6667px;"> Edelrost Garten Feuerschale Pflanzenschale Rost aus Metall mit Konus Blumen </span></font><div><font face="Arial"><span style="font-size: 18.6667px;">
Mithilfe welches Codes bekommst du den denn momentan?
Danke, klappt! Wie genau kommst du darauf?
Da ist ein <div> mit ID „ds_div“, darin ist ein <font>, darin ein weiterer <font>, und darin dann der <span> mit dem Text.
Also
#ds_div > font > font > span
Der Pfeil bedeutet soviel wie „direkter Nachfahre“. Der Hashtag bedeutet „Element mit der ID“.
Ist ein normaler CSS Selektor. Dafür wäre es natürlich nützlich, wenn man die CSS Basics kann. BeautifulSoups select und select_one erlaubt dir, normale CSS Selektoren zu benutzen, um Elemente auszuwählen. Find ich beiweitem einfacher als find.
Das ist doch HTML, somit würde ich auch einen HTML-Parser benutzen.
Da scheint doch BeautifulSoup der richtige Parse zu sein.
Schau dir die Funktion an
soup.get_text()
Doku sagt: The get_text() function retrieves all the text from the HTML document.
Sie liefert nur die reinen Teste aus dem HTML Dokument/Fragment.
Hier wird sie erklärt:
https://stackabuse.com/guide-to-parsing-html-with-beautifulsoup-in-python/
Viel Erfolg!
So habe ich ja die html ausgabe bekommen ;) steht auch da. Danke trotzdem! Möchte ja nur den teil rausbekommen. Da ist ja noch mehr text in der gesamten html
Python hat eine eingebaute Funktion, die Präfixe und Suffixe entfernt.
Da du erwähnt hast, dass die Text-Teile um deinen eigentlichen Text immer gleich bleiben, daher solltest du diese Funktionen verwenden.
string = '<prefixBeispiel>text<suffixBeispiel>'
output = string.removeprefix("<prefixBeispiel>").removesuffix("<suffixBeispiel>")
Das "<prefixBeispiel>" und "<suffixBeispiel>" musst du natürlich deinen Wünschen entsprechend verändern.
Du könntest RegEx nehmen, oder einfach split:
text = html.split(';">')[1].split('<')[0];
Danach steht dein gewünschter Text in der Variablen "text".
Gut, reguläre Ausdrücke mögen eleganter sein, brauchen aber einen zusätzlichen Import und sind auch nicht kürzer, eher im Gegenteil. :)
text1223 = textv0.split(';">')[1].split('<')[0];
print(text1223)
Gibt leider kein output :(
Genau mit soup.find kenne ich mich ja nicht aus.. :( Hier mal der Link zum HTML Code (Ich möchte den Titel herausfiltern und ihn mir ausgeben lassen): eBay (ebaydesc.com)
Wenn der code nicht angezeigt wird einfach rechtsklick -> seitenquelltext anzeigen
Danke dir wirklich das hilft mir sehr!!! :)
PS: Mit titel meine ich in diesem Beispiel, dass mir "Edelrost Garten Feuerschale Pflanzenschale Rost aus Metall mit Konus Blumen
Handarbeit " ausgegeben wird. :)