Skip to content

Commit c2e7859

Browse files
committed
Add Stuttgarter Zeitung Parser, (Sued West Presse didnt work)
1 parent 3c77db1 commit c2e7859

File tree

5 files changed

+103
-0
lines changed

5 files changed

+103
-0
lines changed

src/fundus/publishers/de/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from .ntv import NTVParser
2525
from .rheinische_post import RheinischePostParser
2626
from .spon import SPONParser
27+
from .stuttgarter_zeitung import StuttgarterZeitungParser
2728
from .stern import SternParser
2829
from .sz import SZParser
2930
from .tagesschau import TagesschauParser
@@ -46,6 +47,16 @@ class DE(PublisherEnum):
4647
parser=BerlinerMorgenpostParser,
4748
)
4849

50+
StuttgarterZeitung = PublisherSpec(
51+
name="Stuttgarter Zeitung",
52+
domain="https://www.stuttgarter-zeitung.de/",
53+
sources=[
54+
NewsMap("https://www.stuttgarter-zeitung.de/docs.newsmap_stuttgarter_zeitung.xml"),
55+
Sitemap("https://www.stuttgarter-zeitung.de/docs.universal_sitemap_stuttgarter_zeitung.xml"),
56+
],
57+
parser=StuttgarterZeitungParser,
58+
)
59+
4960
DieWelt = PublisherSpec(
5061
name="Die Welt",
5162
domain="https://www.welt.de/",
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import datetime
2+
from typing import List, Optional
3+
4+
from fundus.parser import ArticleBody, BaseParser, ParserProxy, attribute
5+
from fundus.parser.data import ArticleSection, TextSequence
6+
from fundus.parser.utility import (
7+
extract_article_body_with_selector,
8+
generic_author_parsing,
9+
generic_date_parsing,
10+
generic_topic_parsing,
11+
normalize_whitespace,
12+
)
13+
from lxml.cssselect import CSSSelector
14+
15+
16+
class StuttgarterZeitungParser(ParserProxy):
17+
class V1(BaseParser):
18+
_paragraph_selector = CSSSelector("div.article-body p")
19+
_subheadline_selector = CSSSelector("div.article-body h2")
20+
21+
@attribute
22+
def body(self) -> ArticleBody:
23+
summary_text = self.precomputed.ld.bf_search("description")
24+
summary = TextSequence([summary_text]) if summary_text else TextSequence([])
25+
26+
paragraph_elements = self._paragraph_selector(self.precomputed.doc)
27+
paragraph_texts = [normalize_whitespace(elem.text_content()) for elem in paragraph_elements]
28+
29+
subheadline_elements = self._subheadline_selector(self.precomputed.doc)
30+
31+
sections = [ArticleSection(headline=TextSequence([]), paragraphs=TextSequence(paragraph_texts))]
32+
33+
return ArticleBody(summary=summary, sections=sections)
34+
35+
@attribute
36+
def publishing_date(self) -> Optional[datetime.datetime]:
37+
return generic_date_parsing(self.precomputed.ld.bf_search("datePublished"))
38+
39+
@attribute
40+
def authors(self) -> List[str]:
41+
return generic_author_parsing(self.precomputed.ld.bf_search("author"))
42+
43+
@attribute
44+
def title(self) -> Optional[str]:
45+
return self.precomputed.meta.get("og:title")
46+
47+
@attribute
48+
def topics(self) -> List[str]:
49+
return generic_topic_parsing(self.precomputed.ld.bf_search("keywords"))
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"V1": {
3+
"authors": [
4+
"Knut Krohn"
5+
],
6+
"body": {
7+
"summary": [
8+
"Europas Staats- und Regierungschefs bringen in Brüssel das 19. Sanktionspaket gegen Russland auf den Weg. Putin-Freund Orban entzieht sich aber dem Prozedere."
9+
],
10+
"sections": [
11+
{
12+
"headline": [],
13+
"paragraphs": [
14+
"Europas Staats- und Regierungschefs bringen in Brüssel das 19. Sanktionspaket gegen Russland auf den Weg. Putin-Freund Orban entzieht sich aber dem Prozedere.",
15+
"Ein wichtiger Mann fehlt beim Gipfelstart. Ungarns Premierminister Viktor Orban schwänzte die wichtige Arbeitssitzung der Staats- und Regierungschefs am Donnerstagmorgen in Brüssel und ersparte sich damit eine kleine Demütigung.",
16+
"Während seine Kollegen ihre Unterschrift unter das 19. Sanktionspaket der EU gegen Russland setzten, weilte Orban bei einem „Friedensmarsch“ anlässlich des Jahrestags des ungarischen Volksaufstands von 1956 gegen die sowjetische Besatzung. Der Putin-Freund aus Budapest hatte in der Vergangenheit wiederholt Sanktionen gegen Russland blockiert und die EU damit in die Bredouille gebracht.",
17+
"Dieses Mal ging aber alles reibungslos über die Bühne. Zentraler Punkt des Sanktionspaketes ist ein vollständiges Importverbot von Flüssigerdgas (LNG) aus Russland, das schon 2027 gelten soll und damit ein Jahr früher als ursprünglich geplant. Zudem sind auch weitere Strafmaßnahmen im Finanzsektor und Handelsbereich sowie Einschränkungen der Bewegungsfreiheit russischer Diplomaten innerhalb der EU vorgesehen.",
18+
"Der dänische Außenminister Lars Løkke Rasmussen sprach am Donnerstag im Namen der derzeitigen dänischen EU-Ratspräsidentschaft von einem guten Tag für Europa und für die Ukraine. „Die Sanktionen zeigen Wirkung und treffen die russische Wirtschaft. Russland hat zunehmend Schwierigkeiten, seinen illegalen Angriffskrieg gegen die Ukraine zu finanzieren“, erklärte er.",
19+
"Zuletzt hatte sich nur noch die Slowakei gegen die Verschärfung der Maßnahmen gestemmt. Das kleine Land bezieht noch große Mengen Gas und Öl aus Russland und befürchtet bei einem Importstopp gravierende Nachteile für seine Bürger.",
20+
"Nun erklärte Regierungschef Robert Fico, die EU habe wie von ihm gefordert zugesagt, mehr gegen explodierende Energiepreise zu unternehmen.",
21+
"Sichtlich erleichtert über das neue Sanktionspaket der EU äußerte sich der ukrainische Präsident Wolodymyr Selenskyj, der als Gast zum Gipfel in Brüssel eingeladen war. „Diese Entscheidung über das 19. Sanktionspaket ist für uns von enormer Bedeutung“, betonte er, um dann im selben Atemzug die USA zu loben. Der Grund: erstmals in der zweiten Amtszeit von Präsident Donald Trump hatte die US-Regierung am Mittwochabend neue Sanktionen direkt gegen Russland verhängt. „Darauf haben wir gewartet. So Gott will, wird es funktionieren“, sagte Selenskyj am Rande des EU-Gipfels.",
22+
"Offensichtlich hat Kreml-Herrscher Wladimir Putin mit seiner Hinhaltetaktik die Geduld Donald Trumps bei dessen Suche nach einer Lösung des Konfliktes in der Ukraine zu sehr strapaziert. US-Finanzminister Scott Bessent erklärte in Washington, angesichts der Weigerung Wladimir Putins, den „sinnlosen Krieg“ gegen die Ukraine zu beenden, würden die zwei größten russischen Ölkonzerne Rosneft und Lukoil mit Strafmaßnahmen belegt.",
23+
"Auch Bundeskanzler Friedrich Merz (CDU) zeigte sich in Brüssel zufrieden mit dem neuen Sanktionspaket, doch wurde deutlich, dass er persönlich für den Gipfel einen ganz anderen thematischen Schwerpunkt setzte. Am Rande des Treffens äußerte er seine „allergrößte Sorge um die Arbeitsplätze in Europa“.",
24+
"Mit Nachdruck forderte Merz am Donnerstag „schnelle Entscheidungen“ der Europäischen Union zur Wiederherstellung der Wettbewerbsfähigkeit der europäischen Industrie. Dies betreffe „ein Land wie die Bundesrepublik Deutschland in ganz besonderem Maße“, betonte der Bundeskanzler. Aus diesem Grund müsse Brüssel den Abbau von bürokratischen Hürden „sehr viel schneller“ vorantreiben als bisher.",
25+
"In den Tagen vor dem Gipfel hatte Friedrich Merz bereits die „Regulierungswut“ der EU heftig kritisiert und forderte etwa eine grundlegende Veränderung im Denken der EU-Kommission.",
26+
"Sein völliges Unverständnis äußerte der Kanzler in diesem Zusammenhang über eine Entscheidung des Europäischen Parlaments vom Mittwoch. Dort hatten die Abgeordneten mit hauchdünner Mehrheit gegen Lockerungen des äußerst umstrittenen EU-Lieferkettengesetzes gestimmt. Die Ablehnung sei „inakzeptabel“ und eine fatale Fehlentscheidung, die korrigiert werden müsse, polterte Merz, der die Stärkung der Wettbewerbsfähigkeit zu einem Hauptthema seiner Amtszeit erhoben hatte."
27+
]
28+
}
29+
]
30+
},
31+
"publishing_date": "2025-10-23 14:24:21+02:00",
32+
"title": "EU-Gipfel in Brüssel: Viktor Orban schwänzt den EU-Gipfel-Start",
33+
"topics": [
34+
"Ukraine",
35+
"Sanktionen",
36+
"Viktor Orban"
37+
]
38+
}
39+
}
Binary file not shown.

tests/resources/parser/test_data/de/meta.info

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@
9999
"url": "https://www.stern.de/wirtschaft/geld/epi-zahlungssystem--so-kann-europa-paypal--apple-pay-und-visa-schlagen-33420056.html?utm_campaign=alle-nachrichten&utm_medium=rss-feed&utm_source=standard",
100100
"crawl_date": "2023-04-28 20:32:03.502152"
101101
},
102+
"StuttgarterZeitung_2025_10_23.html.gz": {
103+
"url": "https://www.stuttgarter-zeitung.de/inhalt.eu-gipfel-in-bruessel-viktor-orban-schwaenzt-den-eu-gipfel-start.969db64e-268b-41b5-a180-903fe262e3fe.html",
104+
"crawl_date": "2025-10-23 14:45:06.339099"
105+
},
102106
"Tagesschau_2023_04_28.html.gz": {
103107
"url": "https://www.tagesschau.de/inland/innenpolitik/ahrtal-flut-bilanz-100.html",
104108
"crawl_date": "2023-04-28 20:25:17.117496"

0 commit comments

Comments
 (0)