beatuifulsoup - irgendetwas finden und darin was anderes?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kaineanung
User
Beiträge: 145
Registriert: Sonntag 5. April 2015, 20:57

Hallo Leute,

ich habe mal wieder ein Problem das ich schwer beschreiben kann, aber ich versuche es mal:

Ich habe eine HTML-Datei in welcher irgendwo ein div-container mit der class=cont1 ist.
Also muss ich danach so suchen:

Code: Alles auswählen

temp = soup.find("div", {"class": "cont1"}

Jetzt habe ich in diesem DIV-Container (also in dem 'temp') 2 links (a href...) und der welcher mich interessiert hat eine class = "link1" (der Zweite).
Wie finde ich diesen content dieses Links dann in beautiful soup?
Kann ich das in einem Schritt machen? Also den soup.find(...) so gestaltet das er mir den Inhalt des zweiten Links liefert? Oder muss ich dann in dem gefundenen Content (in temp) dann nochmals scrapen (oder wie auch immer das heissen mag?)?

Wie würde das dann gehen?

Und die zweite Frage:
Wie kann ich die Attribute der HTML-Tags herauslesen?
z.B. in <a href="www.xxxxx.de" title="irgendwas">Startseite</a> den title 'irgendwas'?
BlackJack

@kaineanung: Die Suchergebnisse von BeautifulSoup haben (wenn es HTML-Elemente sind) selbst wieder die ganzen Funktionen zum Suchen die auch das `soup`-Objekt hatte. Wenn Du also im `soup`-Objekt etwas gefunden hast, kannst Du genau so auf dem Objekt welches das <div>-Element repräsentiert suchen.

Falls der Link den Du suchst der erste mit der CSS-Klasse 'link1' ist, dann geht das vom <div>-Element auch wieder mit einem `find()`.

Das extra Wörterbuch braucht man für 'class'-Attribute nicht, den Klassennamen kann man einfach als zweites Argument an `find()` übergeben. Also:

Code: Alles auswählen

a_node = soup.find('div', 'cont1').find('a', 'link1')
BeautifulSoup kann auch CSS-Selektoren, liefert dann allerdings eine Liste mit Ergebnissen, auch wenn nur ein Element zutrifft:

Code: Alles auswählen

a_node = soup.select('div.cont1 a.link1')[0]
Die zweite Frage sollte die BeautifulSoup-Dokumentation eigentlich beantworten.
Antworten