[Python-de] HTML parsen, ü nach ü
"Martin v. Löwis"
martin at v.loewis.de
Fre Dez 10 09:28:13 CET 2004
David Wojak wrote:
> Konkret: Man nehme HTML-Seite, parst sich gewisse Daten (bsp: Newspage wie
> www.heise.de) und generiert daraus eine XML Datei.
>
> Wie geh ich das an?
>
> Bin noch relativ neu in Python, also bitte ned bös sein, wenn die Frage Müll
> ist, allerdings hab ich hier ein Problem mit den Encodings... (ü ->
> {)
Zunächst mal solltest Du verstehen, was ü bedeutet. Das ist in der
HTML-DTD erklärt:
http://www.w3.org/TR/html4/sgml/entities.html
Dort findest Du
<!ENTITY uuml CDATA "ü" -- latin small letter u with diaeresis,
U+00FC ISOlat1 -->
Das heißt, ü ist dasselbe wie ü.
Zum Parsen von HTMl gibt es mehrere Möglichkeiten. Oft ist es am
einfachsten, sich auf eine feste Struktur zu verlassen, und
nach bestimmten strings zu suchen. Wenn Du beispielsweise aus
www.heise.de alle Titel ermitteln willst, kann man beobachten, dass
diese immer die Form haben
<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!
Nun werden einige argumentieren, dass man das ganz anders lösen sollte.
Ich auch:
Ich würde den RDF-Feed von http://www.heise.de/newsticker/heise.rdf
benutzen und nicht die HTML-Seiten. Die kann man ganz normal mit
XML-Bibliotheken verarbeiten, ohne sich auf bestimmte Stringpositionen
verlassen zu müssen.
Ciao,
Martin