[Python-de] HTML parsen, ü nach ü

genrich Genrich at gmx.net
Fre Dez 10 09:56:00 CET 2004


Martin v. Löwis schrieb:
> <h3 class="anriss"> <a href="/newsticker/meldung/54105">c't magazin.tv: 
> Preiswert surfen mit Modem und ISDN</a></h3>
> 
> Das heißt, Du suchst nach allen Zeilen, die mit '<h3 class="anriss"'
> beginnen:
> 
> for line in urllib.urlopen("http://www.heise.de").readlines():
>     if not line.startswith('<h3 class="anriss"'):
>         continue
> 
> In diesen Zeilen willst Du den Teilstring zwischen dem zweiten >-Zeichen
> und dem folgenden <-Zeichen. Die erste Position ergibt sich aus
> 
>     start = line.index(">", 20)+1
> 
> Der zweite Parameter von .index verlangt, dass die Suche erst ab
> Position 20 beginnt, da auf Position 18 bereits ein >-Zeichen steht.
> Das Ende ergibt sich dann aus
> 
>     ende = line.index("<", start)
> 
> und der gesamte Titel durch
> 
>     print line[start:ende]
> 
> Fertig!

Uhi! Also in deinem Beispiel mag es vielleicht noch klappen... Aber wenn nur innerhalb des 
zu suchenden Tags (in dem Falle <h3></h3>) noch ein anderes Tag ist, sieht es nicht so gut 
aus!
Wende deine Lösung mal auf das folgende an:
<h3><b>BlaBla</b></h3>

Du würdest mit
	ende = line.index("<", start)
nicht das </h3> treffen, sondern schon das am Anfang stehende <b> :(

Nun könnte man auf die Idee kommen nach "</*>" zu suchen... Aber so einfach ist es auch 
nicht, wenn eine Verschachtelung vorliegt. Zugegeben bei Überschrift Tags kommt es nicht 
vor... Aber Bsp die Suche nach Tabellen:
<table>[...]<table>[...]</table>[...]</table>



genrich