Skip to content

Commit bd1457c

Browse files
authored
Merge pull request #808 from myoncee/add-swp-publisher
Add Stuttgarter Zeitung Parser
2 parents 6e337ea + 779a235 commit bd1457c

File tree

6 files changed

+155
-0
lines changed

6 files changed

+155
-0
lines changed

docs/supported_publishers.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,6 +1188,25 @@
11881188
<td>&#160;</td>
11891189
<td>&#160;</td>
11901190
</tr>
1191+
<tr>
1192+
<td>
1193+
<code>StuttgarterZeitung</code>
1194+
</td>
1195+
<td>
1196+
<div>Stuttgarter Zeitung</div>
1197+
</td>
1198+
<td>
1199+
<a href="https://www.stuttgarter-zeitung.de/">
1200+
<span>www.stuttgarter-zeitung.de</span>
1201+
</a>
1202+
</td>
1203+
<td>
1204+
<code>de</code>
1205+
</td>
1206+
<td>&#160;</td>
1207+
<td>&#160;</td>
1208+
<td>&#160;</td>
1209+
</tr>
11911210
<tr>
11921211
<td>
11931212
<code>SZ</code>

src/fundus/publishers/de/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from .spon import SPONParser
4141
from .sportschau import SportSchauParser
4242
from .stern import SternParser
43+
from .stuttgarter_zeitung import StuttgarterZeitungParser
4344
from .sz import SZParser
4445
from .tagesschau import TagesschauParser
4546
from .tagesspiegel import TagesspiegelParser
@@ -93,6 +94,15 @@ class DE(metaclass=PublisherGroup):
9394
],
9495
)
9596

97+
StuttgarterZeitung = Publisher(
98+
name="Stuttgarter Zeitung",
99+
domain="https://www.stuttgarter-zeitung.de/",
100+
parser=StuttgarterZeitungParser,
101+
sources=[
102+
NewsMap("https://www.stuttgarter-zeitung.de/docs.newsmap_stuttgarter_zeitung.xml"),
103+
],
104+
)
105+
96106
HamburgerAbendblatt = Publisher(
97107
name="Hamburger Abendblatt",
98108
domain="https://www.abendblatt.de/",
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import datetime
2+
from typing import List, Optional
3+
4+
from lxml.cssselect import CSSSelector
5+
from lxml.etree import XPath
6+
7+
from fundus.parser import ArticleBody, BaseParser, Image, ParserProxy, attribute
8+
from fundus.parser.utility import (
9+
extract_article_body_with_selector,
10+
generic_author_parsing,
11+
generic_date_parsing,
12+
generic_topic_parsing,
13+
image_extraction,
14+
)
15+
16+
17+
class StuttgarterZeitungParser(ParserProxy):
18+
class V1(BaseParser):
19+
_paragraph_selector = CSSSelector("div.article-body p")
20+
_subheadline_selector = CSSSelector("div.article-body h2")
21+
22+
@attribute
23+
def body(self) -> Optional[ArticleBody]:
24+
return extract_article_body_with_selector(
25+
self.precomputed.doc,
26+
paragraph_selector=self._paragraph_selector,
27+
subheadline_selector=self._subheadline_selector,
28+
)
29+
30+
@attribute
31+
def publishing_date(self) -> Optional[datetime.datetime]:
32+
return generic_date_parsing(self.precomputed.ld.bf_search("datePublished"))
33+
34+
@attribute
35+
def authors(self) -> List[str]:
36+
return generic_author_parsing(self.precomputed.ld.bf_search("author"))
37+
38+
@attribute
39+
def title(self) -> Optional[str]:
40+
return self.precomputed.meta.get("og:title")
41+
42+
@attribute
43+
def topics(self) -> List[str]:
44+
return generic_topic_parsing(self.precomputed.ld.bf_search("keywords"))
45+
46+
@attribute
47+
def images(self) -> List[Image]:
48+
return image_extraction(
49+
doc=self.precomputed.doc,
50+
paragraph_selector=self._paragraph_selector,
51+
image_selector=XPath("//figure//picture//img"),
52+
caption_selector=XPath("./ancestor::figure//figcaption"),
53+
relative_urls=True,
54+
)
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{
2+
"V1": {
3+
"authors": [
4+
"dpa"
5+
],
6+
"body": {
7+
"summary": [],
8+
"sections": [
9+
{
10+
"headline": [],
11+
"paragraphs": [
12+
"Die Sprengung der 160 Meter hohen Kühltürme des ehemaligen Kernkraftwerks markiert das Ende einer Ära – und macht Platz für neue Energieprojekte am Standort Gundremmingen.",
13+
"Gundremmingen - Die beiden jeweils 160 Meter hohen Kühltürme des früheren Kernkraftwerks Gundremmingen in Schwaben sind knapp vier Jahre nach der Stilllegung des Atommeilers gesprengt worden. Pünktlich um 12.00 Uhr fielen die aus insgesamt 56.000 Tonnen Stahlbeton bestehenden Kolosse in sich zusammen.",
14+
"Etwa 30.000 Schaulustige, insbesondere aus Bayern und dem nahen Baden-Württemberg, verfolgten nach Angaben der Polizei die spektakuläre Zerstörung eines Symbols des Atomzeitalters.",
15+
"Die Sprengung verlief genau so, wie die mit dem Abriss beauftragte Thüringer Sprenggesellschaft geplant hatte. Zwischen den beiden Zündungen des für die Zerstörung der zwei Türme benötigten Sprengstoffs gab es etwa 15 Sekunden Zeitunterschied. Die Kühltürme neigten sich jeweils leicht zur Seite und fielen dann senkrecht nach unten in sich zusammen.",
16+
"Der Betreiber RWE und das Spezialunternehmen, das bereits mehrfach Kühltürme und Hochhäuser abgerissen hatte, hatten die Aktion mehr als ein Jahr lang vorbereitet. Mehr als 1.000 Löcher für den Sprengstoff wurden dafür in die Bauwerke gebohrt."
17+
]
18+
},
19+
{
20+
"headline": [
21+
"Behörden überwachen Sperrzone und weisen Parkplätze aus"
22+
],
23+
"paragraphs": [
24+
"Das Kernkraftwerk war Ende 2021 mit der Abschaltung des dritten Blocks endgültig vom Netz gegangen. Seitdem wird die Atomanlage zurückgebaut. Dies wird noch bis in die 2030er Jahre dauern. Die Kühltürme wurden einst gebraucht, um das bei der Stromproduktion erhitzte Kühlwasser herunterzukühlen, ehe es wieder zurück in die Donau geleitet wurde.",
25+
"Für die Sprengung hatte das Landratsamt Günzburg eine große Sperrzone festgelegt. Zahlreiche Polizeibeamte überwachten, dass sich tatsächlich niemand dort aufhielt."
26+
]
27+
},
28+
{
29+
"headline": [
30+
"Größter Batteriespeicher Deutschlands in den Startblöcken"
31+
],
32+
"paragraphs": [
33+
"Obwohl der Rückbau des Atomkraftwerks noch lange läuft, bereitet der Energiekonzern RWE die Folgenutzung des Standorts vor. Seit den 1960er Jahren wurde das Areal für die Kernkraft genutzt. Schon am Mittwoch soll dort der Spatenstich für einen Batteriespeicher gesetzt werden.",
34+
"Laut RWE wird der Speicher mit einer Kapazität von rund 700 Megawattstunden der aktuell größte in Deutschland. Solche Anlagen werden benötigt, um beispielsweise tagsüber bei Sonnenschein gewonnenen Solarstrom zu speichern und dann nachts abgeben zu können. Zudem sind eine Photovoltaik-Anlage und ein neues Gaskraftwerk in Gundremmingen in Planung."
35+
]
36+
}
37+
]
38+
},
39+
"images": [
40+
{
41+
"versions": [
42+
{
43+
"url": "https://www.stuttgarter-zeitung.de/media.media.be7b8bf8-9051-4c0a-bd8f-8f800bc5471a.16x9_700.jpg",
44+
"query_width": null,
45+
"size": {
46+
"width": 16,
47+
"height": 9
48+
},
49+
"type": "image/jpeg"
50+
}
51+
],
52+
"is_cover": true,
53+
"description": "Rückbau von Atomkraftwerk: Kühltürme von AKW Gundremmingen gesprengt",
54+
"caption": "Erst fiel der linke Kühlturm, dann der rechte. Foto: Peter Kneffel/dpa",
55+
"authors": [],
56+
"position": 826
57+
}
58+
],
59+
"publishing_date": "2025-10-25 12:10:35+02:00",
60+
"title": "Rückbau von Atomkraftwerk: Kühltürme von AKW Gundremmingen gesprengt",
61+
"topics": [
62+
"Atomenergie",
63+
"Bayern",
64+
"Baden-Württemberg",
65+
"Deutschland"
66+
]
67+
}
68+
}
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
@@ -219,6 +219,10 @@
219219
"url": "https://www.stern.de/capital/donald-trump--warum-kritik-an-seinem-charakter-so-ineffektiv-ist--35200132.html",
220220
"crawl_date": "2024-11-05 18:24:56.511057"
221221
},
222+
"StuttgarterZeitung_2025_10_25.html.gz": {
223+
"url": "https://www.stuttgarter-zeitung.de/inhalt.rueckbau-von-atomkraftwerk-kuehltuerme-von-akw-gundremmingen-gesprengt.e4f07910-3c72-4551-a37d-96207f2c9b02.html",
224+
"crawl_date": "2025-10-25 15:42:38.178648"
225+
},
222226
"Tagesschau_2023_04_28.html.gz": {
223227
"url": "https://www.tagesschau.de/inland/innenpolitik/ahrtal-flut-bilanz-100.html",
224228
"crawl_date": "2023-04-28 20:25:17.117496"

0 commit comments

Comments
 (0)