Frage: "feedparser" in txt oder csv Speichern

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
Wax007
User
Beiträge: 3
Registriert: Donnerstag 21. November 2019, 15:37

hallo,
bin absoluter Anfänger und habe mir einen kleinen Feedreader gebaut. Würde gerne die Feeds in einer txt oder csv speichern. Komme aber nicht weiter. Vielleicht kann mir jemand helfen.

import feedparser

RSS_URLS = [
'https://www.xxx',
'http://www.xxx',
]

feeds = []
for url in RSS_URLS:
feeds.append(feedparser.parse(url))

for feed in feeds:
for post in feed.entries:
print (post.title)
print (post.link)
print (post.published)


Danke
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Wax007: Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Die erste Schleife lässt sich prima als „list comprehension“ ausdrücken: ``feeds = [feedparser.parse(url) for url in RSS_URLS]``. Beziehungsweise wenn es nicht wichtig ist *wann* die Feeds geparst werden, kann man `feeds` auch weg lassen und mit `map()` arbeiten.

Code: Alles auswählen

#!/usr/bin/env python3
import feedparser

RSS_URLS = ["https://www.heise.de/rss/heise-atom.xml"]


def main():
    for feed in map(feedparser.parse, RSS_URLS):
        for post in feed.entries:
            print(post.title)
            print(post.link)
            print(post.published)


if __name__ == "__main__":
    main()
Zum lesen und schreiben von CSV-Dateien gibt es in der Standardbibliothek das `csv`-Modul.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Wax007
User
Beiträge: 3
Registriert: Donnerstag 21. November 2019, 15:37

Hi __blackjack__,
vielen Danke für das Feedback (klappt perfekt).

Leider bin ich wirklich noch ein Anfänger - wie müsste ich den Code schreiben, wenn ich die Infos in eine CSV oder txt speichern wollte. Das CSV Modul habe ich schon implementiert .

Danke für die Hilfe
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Was meinst Du mit „Das CSV Modul habe ich schon implementiert”? Hast Du Dir schon die Beispiele in der Dokumentation angeschaut? Was verstehst Du daran nicht?
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Wax007: Ich bin ziemlich sicher das Du das nicht implementiert hast, das waren andere. Wenn Du es implementiert hättest, würdest Du wohl eher keine Frage bezüglich der Verwendung stellen. 😉

Womit hast Du denn konkret ein Problem mit der Dokumentation von dem Modul? Was hast Du geschrieben und was macht das jetzt nicht so wie Du das erwartest? Und bei einer Fehlermeldung dann bitte auch die Fehlermeldung/den kompletten Traceback 1:1 zeigen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Wax007
User
Beiträge: 3
Registriert: Donnerstag 21. November 2019, 15:37

Hi,
ich würde gerne die RSS Feeds (vielen Dank für die Überarbeitung) in einer CSV Datei speichern. Leider bin ich noch Anfänger hier eine richtige Lösung zu finden.

import feedparser
import csv

RSS_URLS = ["https://www.heise.de/rss/heise-atom.xml"]


def main():
for feed in map(feedparser.parse, RSS_URLS):
for post in feed.entries:
print(post.title)
print(post.link)
print(post.published)


if __name__ == "__main__":
main()

with open('example.csv', 'w') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['title'], row['link'],row['published'] )

Danke für die Hilfe
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ein `Reader` ist nicht zum speichern da. Da solltest Du Dich nach einem `Writer` umschauen und zwar innerhalb von `main`, außerhalb sollte nichts passieren.
Antworten