Mit BeautifulSoup richtig schachteln [SOLVED!]

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
dcc
User
Beiträge: 3
Registriert: Sonntag 2. Juli 2006, 16:16

Hallo Allerseits!

Ich möchte aus folgendem Html:
<h1 id="eins">Titel1</h1>
<h2>Untertitel 1</h2>
<p>Blah 1 Blah 1 Blah 1</p>
<p> mehr Blah1</p>
<p> noch mehr Blah1</p>

<h1 id="zwei">Titel2</h1>
<h2>Untertitel 2</h2>
<p>Blah 2 Blah 2 Blah 2</p>
<p> mehr Blah2</p>

<h1 id="n"> Titeln</h1>
....
Folgendes rausholen:
Id : eins
Titel: Titel1
Utitel: Untertitel1
Desc: Blah1 ... Nur das erste <p>-Tag!

Id : zwei
Titel: Titel2
Utitel: Untertitel2
Desc: Blah2 ...

...

Es tut mir leid, ich hab ein fürchterliches Brett vor dem Kopf.


Mit sowas wie:

Code: Alles auswählen

from BeautifulSoup import BeautifulSoup 
html = """ der_Kram_oben"""
soup = BeautifulSoup(html)

for h1 soup("h1"):
    print "Id: ", dict(h1.attrs).get("id")
    print "Titel: ", h1.string

for h2 soup("h2"):
    print "Utitel: ", h2.string

for p soup("p"):
    print "Desc: ", p.string
komme ich zwar prima an die Sachen dran, aber es ist halt nicht richtig geschachtelt und ich bekomme alle <p>-Tags und nicht nur das je erste...

Ich habe mich schon durch die BeautifulSoup-Doku gefressen und einiges ausprobiert, aber irgendwie hab ich ein totales Brett vorm Kopf.

Vielen Dank für Euren Hirnschmalz, mir ist es heute leider nicht vergönnt.

dcc

PS: Ich weiß, daß die Lösung in der Doku liegt und wahrscheinlich recht einfach ist. Ich sehe sie aber einfach nicht!
Zuletzt geändert von dcc am Sonntag 2. Juli 2006, 21:58, insgesamt 1-mal geändert.
BlackJack

Könnte ungefähr so gehen. Die Objekte haben einige Methoden um relativ zum bearbeiteten Tag andere Tags zu suchen.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division
from BeautifulSoup import BeautifulSoup

html = """\
<h1 id="eins">Titel1</h1>
<h2>Untertitel 1</h2>
<p>Blah 1 Blah 1 Blah 1</p>
<p> mehr Blah1</p>
<p> noch mehr Blah1</p>

<h1 id="zwei">Titel2</h1>
<h2>Untertitel 2</h2>
<p>Blah 2 Blah 2 Blah 2</p>
<p> mehr Blah2</p>
"""

soup = BeautifulSoup(html)

for head_1 in soup('h1'):
    print 'Id:', head_1['id']
    print 'Titel:', head_1.string
    head_2 = head_1.firstNextSibling('h2')
    print 'Untertitel:', head_2.string
    description = head_2.firstNextSibling('p')
    print 'Beschreibung:', description.string
dcc
User
Beiträge: 3
Registriert: Sonntag 2. Juli 2006, 16:16

Hallo BlackJack!

Vielen Dank! Dein Code läuft out-of-the-box! Ich hatte in der Doku die ganzen Methoden gesehen und damit rumgespielt. Leider bin ich nicht zu dem Ergebniss gekommen. Vielen herzlich Dank!

Gruß,

dcc
Antworten