@seemarc: Anmerkungen zum Quelltext: Kommmentarzeichen sind nicht dazu lustige Muster zu machen. Das bringt dem Leser keinen Mehrwert.
`time` und `urljoin` werden importiert, aber nirgends verwendet.
Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Komplett gross geschriebene Namen sind für Konstanten, nicht für Variablen. Es macht auch nicht wirklich Sinn `fal_rss_sl` in `URL` umzubenennen.
`d`, `fal_rss_sl`, `sal_rss_sl`, und `tal_rss_sl` sind sehr schlechte Namen. Namen sollen dem Leser vermitteln was der Wert dahinter bedeutet, und nicht zum rätselraten zwingen. Also weder einbuchstabige Namen noch welche die kryptische Abkürzungen enthalten oder gar nur daraus bestehen. Man nummeriert auch keine Namen durch, und schon gar nicht mit `f`, `s` und `t` als Abkürzung für `first`, `second`, und `third`. Falls ich hier jetzt das Namensschema richtig geraten habe, trotz des fehlerhaften Kommentars beim ersten Namen. Was ich nicht erraten konnte war warum ausgerechnet `d` für den geparsten Feed steht.
Wenn man Namen durchnummeriert, egal wie man versucht das zu verschleiern, will man sich in der Regel entweder bessere Namen ausdenken, oder gar keine einzelnen Namen sondern eine Datenstruktur. Oft ist das dann eine Liste.
Das Ergebnis von `requests.get()` ist keine Seite sondern eine Antwort. Ob da dann eine (HTML-)Seite dabei ist hängt davon ab was der Server als Body schickt. Und ich würde da auch immer `raise_for_status()`-Aufrufen oder anderweitig sicherstellen das man nicht versucht eine Fehlermeldung im Body als normale, erwartete Daten weiter zu verarbeiten.
CSS-Klassen werden von `BeautifulSoup` besonders behandelt, so dass man da nicht unbedingt ein Wörterbuch draus machen muss. Man kann einen CSS-Klassennamen in der Regel einfach als zweites Argument an die Suchmethoden übergeben.
Warum das Element eine Diva sein soll, erschliesst sich mir nicht so ganz. Zickt das immer rum und ist launisch?
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import feedparser
import requests
from bs4 import BeautifulSoup
RSS_URL = "rsslink"
USER_AGENT = (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
" AppleWebKit/537.36 (KHTML, like Gecko)"
" Chrome/79.0.3945.88"
" Safari/537.36"
)
def query_article(url):
response = requests.get(url, headers={"User-Agent": USER_AGENT})
response.raise_for_status()
soup = BeautifulSoup(response.content, "html.parser")
title_node = soup.h1
card_div = soup.find("div", "card")
text_node = card_div.div.next_sibling.next_sibling.next_sibling
...
def main():
feed = feedparser.parse(RSS_URL)
article_links = [entry["link"] for entry in feed.entries[:3]]
query_article(article_links[0])
if __name__ == "__main__":
main()