Skip to content

Commit e5c01a4

Browse files
authored
Merge pull request #819 from flairNLP/fix-nzz
Update `upper_boundary_selector` for `NZZ`
2 parents 49cdf15 + 56f3d63 commit e5c01a4

File tree

5 files changed

+239
-3
lines changed

5 files changed

+239
-3
lines changed

src/fundus/publishers/ch/nzz.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,6 @@ def images(self) -> List[Image]:
5959
paragraph_selector=self._paragraph_selector,
6060
caption_selector=XPath("./ancestor::figure//h2"),
6161
author_selector=XPath("./ancestor::figure//div[@class='image-description__author']"),
62-
upper_boundary_selector=CSSSelector("div#page"),
62+
upper_boundary_selector=XPath("//section[@data-nzz-tid]"),
6363
lower_boundary_selector=XPath("//div[@class='sharebox']"),
6464
)

src/fundus/publishers/ch/zwanzig_minuten.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@
1414

1515
class ZwanzigMinutenParser(ParserProxy):
1616
class V1(BaseParser):
17+
VALID_UNTIL = datetime.date(2025, 10, 5)
18+
1719
_summary_selector = XPath(
1820
"//div[@class='Article_elementLead__N3pGr']/p | (//div[@type='typeInfoboxSummary'])[1]//li"
1921
)
2022
_subheadline_selector = XPath("//section[@class='Article_body__60Liu']//h2[contains(@class, 'crosshead')]")
2123
_paragraph_selector = XPath("//div[@class='Article_elementTextblockarray__WNyan']/p")
2224

25+
_caption_selector = XPath("./ancestor::figure//figcaption/span[@class='sc-d47814d6-2 bDLFoO']/p")
26+
_author_selector = XPath("./ancestor::figure//figcaption/span[@class='sc-d47814d6-3 bmEwwn']")
27+
2328
@attribute
2429
def body(self) -> Optional[ArticleBody]:
2530
return extract_article_body_with_selector(
@@ -47,6 +52,16 @@ def images(self) -> List[Image]:
4752
doc=self.precomputed.doc,
4853
paragraph_selector=self._paragraph_selector,
4954
upper_boundary_selector=XPath("//article"),
50-
caption_selector=XPath("./ancestor::figure//figcaption/span[@class='sc-d47814d6-2 bDLFoO']/p"),
51-
author_selector=XPath("./ancestor::figure//figcaption/span[@class='sc-d47814d6-3 bmEwwn']"),
55+
caption_selector=self._caption_selector,
56+
author_selector=self._author_selector,
5257
)
58+
59+
class V1_1(V1):
60+
VALID_UNTIL = datetime.date.today()
61+
62+
_summary_selector = XPath("//div[@type='lead']/p | //div[@type='infobox']//li")
63+
_paragraph_selector = XPath("//section//p[@type='textBlockArray']")
64+
_subheadline_selector = XPath("//section//h2[@data-testid='Crosshead']")
65+
66+
_caption_selector = XPath("./ancestor::figure//figcaption/span[@class='sc-b3c65b9d-2 drRlrY']")
67+
_author_selector = XPath("./ancestor::figure//figcaption/span[@class='sc-b3c65b9d-3 eEeXhh']")

tests/resources/parser/test_data/ch/ZwanzigMinuten.json

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,222 @@
100100
],
101101
"publishing_date": "2024-12-17 12:17:15+01:00",
102102
"title": "Tiktok: Brüssel untersucht Wahleinmischung"
103+
},
104+
"V1_1": {
105+
"authors": [
106+
"Michelle de Oliveira"
107+
],
108+
"body": {
109+
"summary": [
110+
"Ernährung spielt in der Erkältungssaison eine wichtige Rolle. Wunder erwarten kannst du keine, aber es gibt einige Lebensmittel, die dich bei der Genesung unterstützen können."
111+
],
112+
"sections": [
113+
{
114+
"headline": [],
115+
"paragraphs": [
116+
"Hier wird gehustet, dort geniest und da geschnieft: Die Erkältungssaison ist in vollem Gange. Dich hat es auch erwischt oder du hast das Gefühl, es kündigt sich etwas an? Vielleicht kannst du die Erkältung noch stoppen, bevor sie richtig ausgebrochen ist. Doch was hilft, wenn es dich bereits erwischt hat?"
117+
]
118+
},
119+
{
120+
"headline": [
121+
"Lebensmittel gegen Erkältung? Keine Magie erwarten"
122+
],
123+
"paragraphs": [
124+
"Einen magischen Trick gibt es nicht, aber durchaus einige Lebensmittel, die dir helfen können, wieder auf die Beine zu kommen. Grundsätzlich – und nicht nur in der Erkältungszeit – gilt natürlich: «Es ist wichtig, zu den Grundlagen zurückzukehren und einen gesunden Lebensstil zu pflegen», sagt der Arzt Hilary Jones gegenüber «BBC». «Nicht rauchen, nicht zu viel Alkohol trinken, ausreichend schlafen und Stress vermeiden.»",
125+
"Wie sieht es mit der Ernährung aus? Soll man die Viren «aushungern», wie man immer mal wieder hört? Wohl eher nicht: «Die Realität ist, dass dein Immunsystem, egal ob du eine Erkältung, Grippe oder Fieber hast, Energie und Nährstoffe benötigt, um seine Arbeit zu erledigen», erklärt Ernährungsberaterin und Autorin Rhiannon Lambert gegenüber «BBC». «Daher war es noch nie so wichtig, zu essen und ausreichend Flüssigkeit zu sich zu nehmen.»"
126+
]
127+
},
128+
{
129+
"headline": [
130+
"Nährstofflieferant Hühnersuppe"
131+
],
132+
"paragraphs": [
133+
"Wenn du wenig Appetit hast, musst du nicht so viel essen wie sonst. Achte aber darauf, dass du auf nährstoffreiche Speisen zurückgreifst. Hühnersuppe etwa liefert Mineralien, Vitamine, Antioxidantien, Ballaststoffe und sekundäre Pflanzenstoffe. «Aus ernährungsphysiologischer Sicht ist Hühnersuppe eine gute Proteinquelle, die die Immunfunktion und die Gewebereparatur unterstützt. Darüber hinaus trägt die Brühe zur Flüssigkeitszufuhr bei, was bei der Bekämpfung einer Krankheit von entscheidender Bedeutung ist», erklärt Lambert.",
134+
"Auch Zitrusfrüchte, Süsskartoffeln, grünes Gemüse und fetter Fisch sollten auf dem Speiseplan stehen. Lachs, Makrele oder Forelle zum Beispiel enthalten Vitamin D, das unser Körper nicht selbst herstellen kann. «Vitamin D kann sowohl die Stimmung verbessern als auch das Immunsystem schützen», sagt die Ernährungsberaterin Roxana Ehsani gegenüber «U.S. News».",
135+
"Achte zudem auf die Zufuhr von Zink, denn Studien haben gezeigt, dass Zink die Dauer und Schwere von Erkältungen verringern kann. Zink ist etwa in Käse, Kernen, Nüssen, Haferflocken, Linsen oder auch Sesam enthalten."
136+
]
137+
},
138+
{
139+
"headline": [
140+
"Knoblauch gegen Entzündungen"
141+
],
142+
"paragraphs": [
143+
"Knoblauch enthält antimikrobielle Inhaltsstoffe. Das liegt vor allem am Allicin, einer schwefelartigen Verbindung, die auch in Zwiebeln und Schnittlauch vorkommt. Allicin hat antioxidative, entzündungshemmende und antibakterielle Eigenschaften. Eine Studie, die im «Journal of Clinical and Translational Research» veröffentlicht wurde, zeigte, dass Knoblauch helfen kann, Entzündungen einzudämmen. Füge den Knoblauch am besten ganz am Schluss oder zum Ende der Kochzeit hinzu, damit der Wirkstoff nicht durch die Hitze zerstört wird."
144+
]
145+
}
146+
]
147+
},
148+
"images": [
149+
{
150+
"versions": [
151+
{
152+
"url": "https://image.20min.ch/2025/10/28/e84ab795-cc5d-4ecb-8959-a368b429622b.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=400&h=400&rect=182%2C85%2C3635%2C2424&s=d37e22452eb27178d1183148e62c1145",
153+
"query_width": null,
154+
"size": {
155+
"width": 400,
156+
"height": 267
157+
},
158+
"type": "image/jpeg"
159+
},
160+
{
161+
"url": "https://image.20min.ch/2025/10/28/e84ab795-cc5d-4ecb-8959-a368b429622b.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=800&h=800&rect=182%2C85%2C3635%2C2424&s=1ae2adf58a15c2ad95f8f9b10ed0e8f6",
162+
"query_width": null,
163+
"size": {
164+
"width": 800,
165+
"height": 533
166+
},
167+
"type": "image/jpeg"
168+
},
169+
{
170+
"url": "https://image.20min.ch/2025/10/28/e84ab795-cc5d-4ecb-8959-a368b429622b.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=1200&h=1200&rect=182%2C85%2C3635%2C2424&s=9398c47f56c4b0cab1a710c90674ad55",
171+
"query_width": null,
172+
"size": {
173+
"width": 1200,
174+
"height": 800
175+
},
176+
"type": "image/jpeg"
177+
},
178+
{
179+
"url": "https://image.20min.ch/2025/10/28/e84ab795-cc5d-4ecb-8959-a368b429622b.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=1600&h=1600&rect=182%2C85%2C3635%2C2424&s=99ad2d391cf905a1442b8f34bd455bb9",
180+
"query_width": null,
181+
"size": {
182+
"width": 1600,
183+
"height": 1067
184+
},
185+
"type": "image/jpeg"
186+
},
187+
{
188+
"url": "https://image.20min.ch/2025/10/28/e84ab795-cc5d-4ecb-8959-a368b429622b.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=2001&h=2000&rect=182%2C85%2C3635%2C2424&s=17b3e383cef901339bdcd0bf925d1eae",
189+
"query_width": null,
190+
"size": {
191+
"width": 2001,
192+
"height": 1334
193+
},
194+
"type": "image/jpeg"
195+
}
196+
],
197+
"is_cover": true,
198+
"description": "Wenn dich eine Erkältung erwischt, kann dich die richtige, nährstoffreiche Ernährung bei der Genesung unterstützen.",
199+
"caption": "Wenn dich eine Erkältung erwischt, kann dich die richtige, nährstoffreiche Ernährung bei der Genesung unterstützen.",
200+
"authors": [
201+
"Getty Images"
202+
],
203+
"position": 457
204+
},
205+
{
206+
"versions": [
207+
{
208+
"url": "https://image.20min.ch/2025/10/28/2fe0086c-29a8-4388-b64d-a8d39a26b623.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=400&h=400&rect=364%2C0%2C3636%2C2471&s=12c123f79dd400f66d5b859c39733efe",
209+
"query_width": null,
210+
"size": {
211+
"width": 400,
212+
"height": 272
213+
},
214+
"type": "image/jpeg"
215+
},
216+
{
217+
"url": "https://image.20min.ch/2025/10/28/2fe0086c-29a8-4388-b64d-a8d39a26b623.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=800&h=800&rect=364%2C0%2C3636%2C2471&s=97e4414561a2b2ada8ebfc8e44ddc52c",
218+
"query_width": null,
219+
"size": {
220+
"width": 800,
221+
"height": 544
222+
},
223+
"type": "image/jpeg"
224+
},
225+
{
226+
"url": "https://image.20min.ch/2025/10/28/2fe0086c-29a8-4388-b64d-a8d39a26b623.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=1200&h=1200&rect=364%2C0%2C3636%2C2471&s=a61a9cc964479da7a05a26861973c92b",
227+
"query_width": null,
228+
"size": {
229+
"width": 1200,
230+
"height": 816
231+
},
232+
"type": "image/jpeg"
233+
},
234+
{
235+
"url": "https://image.20min.ch/2025/10/28/2fe0086c-29a8-4388-b64d-a8d39a26b623.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=1600&h=1600&rect=364%2C0%2C3636%2C2471&s=a3317394e3d3d77b43bffed299704092",
236+
"query_width": null,
237+
"size": {
238+
"width": 1600,
239+
"height": 1088
240+
},
241+
"type": "image/jpeg"
242+
},
243+
{
244+
"url": "https://image.20min.ch/2025/10/28/2fe0086c-29a8-4388-b64d-a8d39a26b623.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=2001&h=2000&rect=364%2C0%2C3636%2C2471&s=05bb312022d0423983c760a988bfd891",
245+
"query_width": null,
246+
"size": {
247+
"width": 2001,
248+
"height": 1361
249+
},
250+
"type": "image/jpeg"
251+
}
252+
],
253+
"is_cover": false,
254+
"description": "Viel Ruhe, Schlaf und Erholung helfen, wieder zu Kräften zu kommen.",
255+
"caption": "Viel Ruhe, Schlaf und Erholung helfen, wieder zu Kräften zu kommen.",
256+
"authors": [
257+
"Unsplash/Kelly Sikkema"
258+
],
259+
"position": 472
260+
},
261+
{
262+
"versions": [
263+
{
264+
"url": "https://image.20min.ch/2025/10/28/fc0553d2-f5ad-4123-ad34-479c99fa4418.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=400&h=400&rect=0%2C0%2C4000%2C2670&s=f466aac21077b07c8afef5126f95d089",
265+
"query_width": null,
266+
"size": {
267+
"width": 400,
268+
"height": 267
269+
},
270+
"type": "image/jpeg"
271+
},
272+
{
273+
"url": "https://image.20min.ch/2025/10/28/fc0553d2-f5ad-4123-ad34-479c99fa4418.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=800&h=800&rect=0%2C0%2C4000%2C2670&s=7342f033caac1cac142365185c35b279",
274+
"query_width": null,
275+
"size": {
276+
"width": 800,
277+
"height": 534
278+
},
279+
"type": "image/jpeg"
280+
},
281+
{
282+
"url": "https://image.20min.ch/2025/10/28/fc0553d2-f5ad-4123-ad34-479c99fa4418.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=1200&h=1200&rect=0%2C0%2C4000%2C2670&s=06d39713a19c840d461c4c8e8c230ef2",
283+
"query_width": null,
284+
"size": {
285+
"width": 1200,
286+
"height": 801
287+
},
288+
"type": "image/jpeg"
289+
},
290+
{
291+
"url": "https://image.20min.ch/2025/10/28/fc0553d2-f5ad-4123-ad34-479c99fa4418.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=1600&h=1600&rect=0%2C0%2C4000%2C2670&s=d613502b7409cb05749e0a0fc475b4d1",
292+
"query_width": null,
293+
"size": {
294+
"width": 1600,
295+
"height": 1068
296+
},
297+
"type": "image/jpeg"
298+
},
299+
{
300+
"url": "https://image.20min.ch/2025/10/28/fc0553d2-f5ad-4123-ad34-479c99fa4418.jpg?auto=format%2Ccompress%2Cenhance&fit=max&w=2001&h=2000&rect=0%2C0%2C4000%2C2670&s=640786c923d02f603190388b2946c3d4",
301+
"query_width": null,
302+
"size": {
303+
"width": 2001,
304+
"height": 1336
305+
},
306+
"type": "image/jpeg"
307+
}
308+
],
309+
"is_cover": false,
310+
"description": "Knoblauch hat antibakterielle Eigenschaften und kann im Kampf gegen Erkältungen helfen.",
311+
"caption": "Knoblauch hat antibakterielle Eigenschaften und kann im Kampf gegen Erkältungen helfen.",
312+
"authors": [
313+
"Pexels/AS Photography"
314+
],
315+
"position": 517
316+
}
317+
],
318+
"publishing_date": "2025-11-06 12:26:47+01:00",
319+
"title": "Hühnersuppe und Co.: Diese Nahrungsmittel helfen dir, wieder fit zu werden"
103320
}
104321
}
Binary file not shown.

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,9 @@
1818
"ZwanzigMinuten_2024_12_17.html.gz": {
1919
"url": "https://www.20min.ch/story/europaeische-kommission-verfahren-bruessel-prueft-einfluss-von-tiktok-auf-wahlen-103241818",
2020
"crawl_date": "2024-12-17 15:30:01.640676"
21+
},
22+
"ZwanzigMinuten_2025_11_06.html.gz": {
23+
"url": "https://www.20min.ch/story/lebensmittel-gegen-erkaeltung-die-richtige-ernaehrung-zur-genesung-103441563",
24+
"crawl_date": "2025-11-06 12:50:27.481041"
2125
}
2226
}

0 commit comments

Comments
 (0)