Hallo ihr Schlangenbeschwörer
ich habe hier ein RSS-Dokument. Mein Ziel ist es, den Inhalt von Tags wie Description, title und link herauszuschneiden und abzuspeichern.
Jetzt die Frage: gibt es eine Funktion, mit der ich z.B. bis zum String '<title>' gehen kann, und ab dem bis zum String '</title>' alles in eine Variable (liste?) packe?
Was gibt es noch für Möglichkeiten an dieses Problem heranzugehen?
lg,
vogti
RSS-Parser
Verwende http://feedparser.org/.
https://www.xing.com/go/invite/18513630.6a91d4
Naja, hatte eigentlich gehofft, dass man da keine extra Bibliothek benötigt. Gibt es vielleicht irgendwo eine Übersicht, wo Operationen für/mit Strings aufgelistet sind? Mein Problem ist eigentlich, dass ich nicht genau weiß, wonach ich suchen solllutz.horn hat geschrieben:Verwende http://feedparser.org/.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Die Übersicht gibt es. Doku nennt sich das http://docs.python.org/lib/lib.html
Die Sache ist aber, dass du nicht mit Strings spielen willst, sondern mit XML Dateien. Du solltest dir mal ElementTree anschauen.
Die Sache ist aber, dass du nicht mit Strings spielen willst, sondern mit XML Dateien. Du solltest dir mal ElementTree anschauen.
Na aber laut Wikipedia sind xml-Dokumente mit RSS-Standart alle nach dem gleichen Muster aufgebaut. Darum dachte ich, dass ichs mir einfahc machen könnte und quasi immer nur nach den Tags wie <title>, <description ... etc. suchen kann. Warum muss ich da großartig mit XML-Bäumen rumhandtieren? Solange ich wirklich nur RSS-XML parse sollte das doch glatt laufen?
In der aktuellen CT (05/09) gibt es folgenden PHP-Schnipsel für ein ähnliches Problem:
In diesem Abschnitt gehts darum den Titel eines HTML-Dokuments auszulesen. Kann man soetwas nicht auch in Python übersetzen?
Oder noch einfacher: Kann ich nicht wenigstens nach dem nächsten "<title>" bzw. "</title>" suchen? Den rest kann man sich ja selbst zusammen basteln... Gibt es da eine Funktion für?
In der aktuellen CT (05/09) gibt es folgenden PHP-Schnipsel für ein ähnliches Problem:
Code: Alles auswählen
$titel = preg_match('#<title>(.+?)</title>#'), $inhalt, $treffer)? $treffer[1] : $pfad;
Oder noch einfacher: Kann ich nicht wenigstens nach dem nächsten "<title>" bzw. "</title>" suchen? Den rest kann man sich ja selbst zusammen basteln... Gibt es da eine Funktion für?
In der Theorie stimmt dass auch. In der Praxis gibt es im Web alles aber keine Standards. Nimm lieber einen fehlertoleranten XML Parser, der versagt nicht so schnell wie irgendwelche Regular Expressions.vogti hat geschrieben:Na aber laut Wikipedia sind xml-Dokumente mit RSS-Standart alle nach dem gleichen Muster aufgebaut.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Du wirst keinen Spass haben, wenn du RSS mit RegExp "parsen" willst. Das Problem dabei ist einfach, dass die zwar alle dem Standard folgen, aber machst du es mit RegExp, dann stüzt dein Kartenhaus schnell zusammen, wenn etwas nicht passt - beim Debuggen schon mal viel Spass
Schau dir die ElementTree Dokumentatiin an, dann wirst du sehen, dass es damit einfacher ist als mit kryptischen RegExp - wir sind hier ja nicht bei Perl.
Solltest du es doch damit machen wollen, dann schau dir die re-Dokumentation und vielleicht auch das RegExp Howto an.
Schau dir die ElementTree Dokumentatiin an, dann wirst du sehen, dass es damit einfacher ist als mit kryptischen RegExp - wir sind hier ja nicht bei Perl.
Solltest du es doch damit machen wollen, dann schau dir die re-Dokumentation und vielleicht auch das RegExp Howto an.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Der Nachteil bei regulären Ausdrücken ist, dass man damit nicht wirklich parsen kann, da bei verschachtelten Strukturen wie sie gerade bei Markup-Formaten wie SGML oder XML oft vorkommen nicht richtig matchen können. Da müsste man noch etwas Supportcode der in verschiedene Zustände wechselt haben (siehe Pygments) und dann ist man nach einigen Stunden debuggen grob da wo man mit dem Feedparser sofort ist.
Weiterer Vorteil: ein XML-Parser ist wesentlich schneller als reguläre Ausdrücke.
Aber gerade auch wenn man mit RSS 0.9, 1.0, 2.0 und Atom konfrontiert ist (die alle miteinander inkompatibel sind), mag man dann nicht für jedes Format einen eigenen Parser schreiben.
Weiterer Vorteil: ein XML-Parser ist wesentlich schneller als reguläre Ausdrücke.
Aber gerade auch wenn man mit RSS 0.9, 1.0, 2.0 und Atom konfrontiert ist (die alle miteinander inkompatibel sind), mag man dann nicht für jedes Format einen eigenen Parser schreiben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Update your bookmarkscofi hat geschrieben:Die Übersicht gibt es. Doku nennt sich das http://docs.python.org/lib/lib.html
@vogti: Zum Thema XML seien "einfache" Zeichenketten:
Viel Spass beim "parsen" mit regulären Ausdrücken.
Code: Alles auswählen
<title>One way to embed <![CDATA[</title>]]> in a title</title>
Warum denn so kompliziert? Der Sinn von Bibliotheken ist es, dass wiederkehrende Probleme nur einmal gelöst werden müssen. Feedparser ist eine sehr stabile Bibliothek, die ein für alle Mal das Problem "wie parse ich stabil einen Feed?" gelöst hat.vogti hat geschrieben:Naja, hatte eigentlich gehofft, dass man da keine extra Bibliothek benötigt.lutz.horn hat geschrieben:Verwende http://feedparser.org/.
Code: Alles auswählen
#!/usr/bin/env python
import feedparser
feed = feedparser.parse("http://blog.fefe.de/rss.xml?html")
print feed["feed"]["title"]
https://www.xing.com/go/invite/18513630.6a91d4