From 6c788a1cacb35f9353c876697782629faa76ad46 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Sat, 1 Oct 2022 17:51:57 +0200 Subject: [PATCH 01/10] fixed reishunger.de parser --- recipe_scrapers/reishunger.py | 30 +- tests/test_data/reishunger.testhtml | 3377 ---------------- tests/test_data/reishunger_1.testhtml | 3218 ++++++++++++++++ tests/test_data/reishunger_2.testhtml | 3408 +++++++++++++++++ ...est_reishunger.py => test_reishunger_1.py} | 12 +- tests/test_reishunger_2.py | 62 + 6 files changed, 6716 insertions(+), 3391 deletions(-) delete mode 100644 tests/test_data/reishunger.testhtml create mode 100644 tests/test_data/reishunger_1.testhtml create mode 100644 tests/test_data/reishunger_2.testhtml rename tests/{test_reishunger.py => test_reishunger_1.py} (71%) create mode 100644 tests/test_reishunger_2.py diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index 5f46c7a61..7ec8ed79c 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -1,6 +1,7 @@ # mypy: disallow_untyped_defs=False +import re + from ._abstract import AbstractScraper -from ._utils import normalize_string class Reishunger(AbstractScraper): @@ -27,17 +28,26 @@ def ingredients(self): return self.schema.ingredients() def instructions(self): - result = self.soup.find("section", {"class": "recipe-preparation"}) - if result: - result = "\n".join( - normalize_string(i.get_text()) for i in result.findAll("p") - ) - return result + elements = self.soup.findAll("div", {"class": "flex flex-col"}) + + for ( + e + ) in ( + elements + ): # for recipes that do NOT allow to switch between different cooking methods + if "Zubereitung" in e.get_text(): + return e.get_text() + + result = self.soup.find( + "div", + { + "x-data": "{ isMobile: window.innerWidth < 720, tab: 'kochtopf' }" # noqa + }, + ) # for recipes that offer multiple cooking methods + return re.sub(r"\n{3,}", "\n", result.get_text()) def ratings(self): - block = self.soup.find("div", {"id": "recipe-header"}).find( - "div", {"class": "nrating"} - ) + block = self.soup.find("div", {"class": "nrating"}) if block: cnt = len(block.findAll("span", {"class": "fa-star"})) return cnt diff --git a/tests/test_data/reishunger.testhtml b/tests/test_data/reishunger.testhtml deleted file mode 100644 index 25890422f..000000000 --- a/tests/test_data/reishunger.testhtml +++ /dev/null @@ -1,3377 +0,0 @@ - - - - - - - - - - -Rezept für Crispy Tofu Bowl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - 30 Tage Rückgaberecht - - -
- Deutschland - -
- -
- - - Kostenloser Versand ab 49 € - - - - -
- - - - - - - -
-(4.82) Trusted Shops - -Trusted Shops -
-
-
-
-
- - -
-
-
- - - - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
-
-
- -
-
-
- -
-

-Crispy Tofu Bowl -

-
-
- -60 Min. -
-
- -Normal -
-
-
- - - - - - -(3) - -Rezept bewerten -
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - -
- -
-
-
-
-
-{ - -28.12.2020 - -
-
-
-
-
-
- -{ -
-
-
- -
-
-Rezeptautor: pommesherz -
-
Einfach, lecker und schnell gemacht. Und super wenn man Reste verwerten will.... weiterlesen
- -
-Profilbild von pommesherz -
-
-
-
-
-
-

Zutaten

-
- -2 Portionen - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-200 gr -
-Bio Basmati Reis -
-Bio-Super Basmati vom Himalaya, Pakistan -
- -
-50 ml -
-Erdnuss Sauce -
-Bio-Fertigsauce mit cremigem Erdnussmus und knackig gerösteten Erdnüssen -
- -
-200 gr Tofu
-etwas Paniermehl
-etwas Mehl
-1 Ei
-100 gr Edamame
-1 Möhre
-1/4 Rotkohl
-50 gr Zuckerschoten
-5 Maiskölbchen
-30 gr Sprossen
-eine Handvoll Cashew Kerne
-
- - - -
- -
-
-
-
-
-
-
-
-

Zubereitung

-
    -
  1. -

    Reis nach Anleitung im Digitalen Reiskocher oder Kochtopf kochen.

    -
  2. -
  3. -

    Gemüse schneiden und ca. 5 min blanchieren.

    -
  4. -
  5. -

    Den Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten.

    -
  6. -
  7. -

    Cashew Kerne in einer Pfanne kurz anrösten.

    -
  8. -
  9. -

    Die Sauce erwärmen und den Tofu auf einen Spieß ziehen (optimal).

    -
  10. -
  11. -

    Alles schön anrichten und mit den Sprossen toppen. Guten Reishunger! :-)

    -
  12. -
-
-
-
-
-
- -
-
-
- -
-
-
- -
- -
-
-
-

Mehr Rezepte mit Bio Basmati Reis

-
-
-
- -
-Veganes "Hähnchen" süß-sauer -
-
-
-Veganes
-
-
-
-
-
-
- - - - - - - -
- 30 Minuten - Normal -
-
-
-
-
- -
-Scharfsüßes Hühnchencurry mit Bananen und Ananas -
-
-
-{
-
-
-
-
-
-
- - - - - - - -
- 30 Minuten - Einfach -
-
-
-
-
- -
-Asiatischer Kokosreis mit knusprigem Tofu -
-
-
-{
-
-
-
-
-
-
- - - - - - - -
- 30 Minuten - Normal -
-
-
-
-
- -
-Rotes Thai Curry mit Kichererbsen und Spinat -
-
-
-Rotes Thai Curry mit Kichererbsen und Spinat
-
-
-
-
-
-
- - - - - - -(3) - -
- 30 Minuten - Einfach -
-
-
-
-
- -
-Cremiges Butter Chicken Curry mit Basmati Reis -
-
-
-{
-
-
-
-
-
-
- - - - - - - -
- 30 Minuten - Normal -
-
-
-
-
- -
-One Pot sommerlicher Zucchini-Erbsen Reis -
-
-
-{
-
-
-
-
-
-
- - - - - - -(1) - -
- 20 Minuten - Einfach -
-
-
-
-
-
-
-
-
-

Bewertungen & Kommentare

- -
-
-
-A -
-
-
-
- - - - - - - -
-
- -Anonym - - -
-
-

Suche nach Veganen Rezept bringt mich zu dem naja etwas weniger Ei dann wird's

-
-
- -
- -
-
-
-
-
-Leslie - -

Danke für den Hinweis! Wir haben es soeben geändert, sodass das Rezept nicht mehr unter "Vegan" aufzufinden ist. :-)

-
-
- -
-
-
-
-
-A -
-
-
-
- - - - - - - -
-
- -Anonym - - -
-
-

So ein tolles Rezept! Danke :)

-
-
- -
- -
-
-
-
-A -
-
-
-
- - - - - - - -
-
- -Anonym - - -
-
-

Habe dieses Rezept heute nach gekocht.Einfach lecker werde ich aufjedenfall wieder machen

-
-
- -
- -
-
-
-
-
-
-
- -

Rezept drucken

-
- - -
-
-
- -
-
- -
-
-
-Gewinne einen Digitalen Reiskocher
-Gewinne einen
Digitalen Reiskocher
-
-
-
-

Melde dich bis zum 18.04.2021 zum Newsletter an und mit etwas Glück gehört der Digitale Reiskocher in der Farbe deiner Wahl schon bald dir!

-
-
-
-
-
Bitte nicht ausfüllen
- - - - - -
-
-
-
- -

Mit der Anmeldung zum Newsletter willigst du der Verarbeitung deiner Email-Adresse zwecks Newsletterversand zu. Weitere Informationen findest Du in unserer Datenschutzerklärung.

-
-
-
-
-
-
-
-
- - - -
-
-
- -
-
-Tasty Box Aktion - -Gratis* statt 9,99 € - -
-
- - -
-
- - -00 -Tage - - -00 -Std - - -00 -Min - - -00 -Sek - - -
- -Jetzt sichern - -
-
- - - - - - - - -Sehr gut - - -4.82/5.00 - - - - - - - - - - - - - - -Käuferschutz -inklusive - - -Sehr gut -4.82/5.00 - - -
- - - - - - - - - - - - - - - - - diff --git a/tests/test_data/reishunger_1.testhtml b/tests/test_data/reishunger_1.testhtml new file mode 100644 index 000000000..09e784840 --- /dev/null +++ b/tests/test_data/reishunger_1.testhtml @@ -0,0 +1,3218 @@ + + + + + + + + + + +Rezept für Crispy Tofu Bowl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + +
+
+
+
+
+
+ +
+
+

+Crispy Tofu Bowl +

+
+
+
+
+ + + + + +60 Min + +
+
+Gesamtzeit +
+
+
+
+ + + + + +Normal + +
+
+Schwierigkeit +
+
+
+
+ +
+Profilbild von pommesherz +
+
+Rezeptautor: +pommesherz +
+
+
+
+
+ + + +
+
+Einfach, lecker und schnell gemacht. Und super wenn man Reste verwerten will. +
+
+Einfach, lecker und schnell gemacht. Und super wenn man Reste verwerten will.... +
+
+
+
+
+
+
+
+

+Deine Zutatenliste +

+
+ + +
+
+
+
+Portionen +
+
+ + + +
+ +2 + +
+ + + +
+
+
+
+
+ +200 gr + +
+
+ +Bio Basmati Reis + +
+Bio-Super Basmati vom Himalaya, Pakistan +
+ +
+
+
+ +50 ml + +
+
+ +Erdnuss Sauce + +
+Bio-Fertigsauce mit cremigem Erdnussmus und knackig gerösteten Erdnüssen +
+ +
+
+
+ +200 gr + +
+Tofu +
+
+
+ +etwas + +
+Paniermehl +
+
+
+ +etwas + +
+Mehl +
+
+
+ +1 + +
+Ei +
+
+
+ +100 gr + +
+Edamame +
+
+
+ +1 + +
+Möhre +
+
+
+ +1/4 + +
+Rotkohl +
+
+
+ +50 gr + +
+Zuckerschoten +
+
+
+ +5 + +
+Maiskölbchen +
+
+
+ +30 gr + +
+Sprossen +
+
+
+ +eine Handvoll + +
+Cashew Kerne +
+
+
+
+
+
+
+
+
+

+Zubereitung +

+
+ + +
+
+
+
+
+1. Schritt +
+
+
+

+Reis nach Anleitung im Digitalen Reiskocher oder Kochtopf kochen. +

+
+
+2. Schritt +
+
+
+

+Gemüse schneiden und ca. 5 min blanchieren. +

+
+
+3. Schritt +
+
+
+

+Den Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten. +

+
+
+4. Schritt +
+
+
+

+Cashew Kerne in einer Pfanne kurz anrösten. +

+
+
+5. Schritt +
+
+
+

+Die Sauce erwärmen und den Tofu auf einen Spieß ziehen (optimal). +

+
+
+6. Schritt +
+
+
+

+Alles schön anrichten und mit den Sprossen toppen. Guten Reishunger! :-) +

+
+
+
+
+
+
+
+
+

+Bewertungen & Kommentare +

+
+ + +
+
+
+
+ +
+
+
+A +
+
+
+
+ + + + + + + +
+
+Anonym + +
+
+
+

Habe dieses Rezept heute nach gekocht.Einfach lecker werde ich aufjedenfall wieder machen

+
+
+ +
+ +
+
+
+
+A +
+
+
+
+ + + + + + + +
+
+Anonym + +
+
+
+

So ein tolles Rezept! Danke :)

+
+
+ +
+ +
+
+
+
+A +
+
+
+
+ + + + + + + +
+
+Anonym + +
+
+
+

Suche nach Veganen Rezept bringt mich zu dem naja etwas weniger Ei dann wird's

+
+
+ +
+ +
+
+
+
+
+
+Leslie + +

Danke für den Hinweis! Wir haben es soeben geändert, sodass das Rezept nicht mehr unter "Vegan" aufzufinden ist. :-)

+
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+ + + +
+ +
+
+
+
+
+ +
+Crispy Tofu Bowl +
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+
+
+

Exklusiv! Digitales Rezeptbuch per E-Mail

+
+
+ +Gratis +
Digitales
Rezeptbuch bei
Anmeldung
+
+
+Gratis bei Newsletter Anmeldung +
+ +
+ +
Bitte nicht ausfüllen
+
+ + + +
+ +
+ +
+
+
+
+

+Mehr Rezepte mit Bio Basmati Reis +

+
+
+ +
+ +
+
+ + + + + + +
+ + + + + + + + +Sehr gut + + +4.88/5.00 + + + + + + + + + + + + + + +Käuferschutz +inklusive + + +Sehr gut +4.88/5.00 + + +
+ + + + + + + + + + + + + + + + + diff --git a/tests/test_data/reishunger_2.testhtml b/tests/test_data/reishunger_2.testhtml new file mode 100644 index 000000000..22c6e5734 --- /dev/null +++ b/tests/test_data/reishunger_2.testhtml @@ -0,0 +1,3408 @@ + + + + + + + + + + +Rezept für Süßkartoffel-Kichererbsen-Curry + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + +
+
+
+
+
+
+ +
+
+

+Süßkartoffel-Kichererbsen-Curry +

+
+
+
+
+ + + + + +15 Min + +
+
+Gesamtzeit +
+
+
+
+ + + + + +Einfach + +
+
+Schwierigkeit +
+
+
+
+ +
+Profilbild von snackicat +
+
+Rezeptautor: +snackicat +
+
+
+
+
+ + + +
+
+Lust auf einen Hauch indische Küche? Dann gönnt euch diese leckere Süßkartoffel-Kichererbsen-Curry. Schnell gemacht, unheimlich lecker und voller gesunder Zutaten. Die Kichererbsen versorgen euren Körper mit viel Eiweiß und machen euch in Kombination mit den Süßkartoffeln und dem Reis lange satt. +
+
+Lust auf einen Hauch indische Küche? Dann gönnt euch diese leckere Süßkartof... +
+
+
+
+
+
+
+
+

+Deine Zutatenliste +

+
+ + +
+
+
+
+Portionen +
+
+ + + +
+ +3 + +
+ + + +
+
+
+
+
+ +240g + +
+
+ +Basmati Reis Pusa + +
+Basmati Pusa 1121 aus Indien, Himalaya +
+ +
+
+
+ +1 TL + +
+
+ +Kokosöl + +
+Kaltgepresstes Bio Kokosöl +
+ +
+
+
+ +1 Dose + +
+
+ +Bio Kichererbsen + +
+Große Bio-Kichererbsen aus der Türkei +
+ +
+
+
+ +200ml + +
+
+ +Kokosmilch + +
+Extra cremig mit 50% Kokosnussanteil +
+ +
+
+
+ +1 + +
+Zwiebel +
+
+
+ +1 + +
+Knoblauchzehe +
+
+
+ +1 + +
+mittelgroße Süßkartoffel (hier: 300g) +
+
+
+ +1 + +
+Paprika +
+
+
+ +150ml + +
+Wasser +
+
+
+ +20g + +
+Ingwer +
+
+
+ +3 TL + +
+Curry +
+
+
+ + +
+Salz, Cayenne Pfeffer, Paprika edelsüß +
+
+
+ + +
+Kräuter nach Belieben (hier: Petersilie) +
+
+
+
+
+
+
+
+
+

+Zubereitung +

+
+ + +
+
+
+
+
+1. Schritt +
+
+
+
+

+Ausgewählte Sorte: + +Basmati Reis Pusa + +

+
+
+
+
+
+
+ + + +
+
+Kochtopf +
+
+
+
+ + + + + + + + +
+
+Reiskocher +
+
+
+
+ + + +
+
+Mikrowelle +
+
+
+
+ + + + + + + + + + +
+
+Dämpfer +
+
+
+
+
+
+

+Zubereitung im +Kochtopf +

+
+
    +
  1. +Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. +
  2. +
  3. +Reis in einen Kochtopf geben. +
  4. +
  5. +Wasser dazugeben. Nach Belieben salzen. +
  6. +
  7. +Reis 10 Minuten einweichen lassen. +
  8. +
  9. +Herd auf die höchste Hitzestufe stellen und Reis aufkochen lassen. +
  10. +
  11. +Sobald das Wasser kocht, den Herd auf die mittlere Hitzestufe stellen und den Reis ca. 15 Minuten bei geschlossenem Deckel köcheln lassen bis das Wasser komplett aufgesogen wurde. +
  12. +
  13. +Nach Belieben ein Stück Butter hinzufügen. +
  14. +
+
+
+
+
+
+

+Zubereitung im + +Reiskocher + +

+
+
    +
  1. +Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Anschließend den Reis in den Innentopf geben. +
  2. +
  3. +Reis in den Reiskocher geben. +
  4. +
  5. +Wasser dazugeben. Nach Belieben salzen. +
  6. +
  7. +Deckel schließen und den Kochvorgang im Modus "Weiß" starten. +
  8. +
  9. +Sobald der Reiskocher in den Warmhaltemodus schaltet, ist der Reis fertig. +
  10. +
  11. +Nach Belieben ein Stück Butter hinzufügen. +
  12. +
+
+
+
+
+
+

+Zubereitung im + +Mikrowellen-Reiskocher + +

+
+
    +
  1. +Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. +
  2. +
  3. +Reis in den Mikrowellen Reiskocher geben. +
  4. +
  5. +Wasser dazugeben. Nach Belieben salzen. +
  6. +
  7. +Deckel aufsetzen und bei höchster Stufe (600-800 Watt) für 11 Minuten in die Mikrowelle stellen. +
  8. +
  9. +Nach Belieben ein Stück Butter hinzufügen. +
  10. +
+
+
+
+
+
+

+Zubereitung im + +Dämpfer + +

+
+
    +
  1. +Reis waschen. Du bedeckst den Reis mit kaltem Wasser. Mit den Händen bearbeitest du den Reis in kreisenden Bewegungen. Durch die überschüssige Stärke wird das Wasser trüb. Nun gießt du das Wasser ab und wiederholst den Vorgang solange bis das Wasser klar bleibt. +
  2. +
  3. +Bambuskorb mit einem Baumwolltuch auslegen und den Reis darauf geben. +
  4. +
  5. +Mit Stäbchen oder Gabel Löcher in die Masse drücken durch die Dampf entweichen kann. +
  6. +
  7. +Bambuskorb mit Korbdeckel schließen. Topfboden mit ca. 1 cm Wasser bedecken und Bambuskorb reinstellen. +
  8. +
  9. +Bei niedriger bis mittlerer Hitze ca. 20 Minuten dämpfen lassen. Zwischenzeitlich Wasser nachkippen, sodass der Korb stetig in ca. 1 cm hohem Wasser steht. +
  10. +
  11. +Reis entnehmen und nach Belieben ein Stück Butter hinzufügen. +
  12. +
+
+
+
+
+
+
+
+
+2. Schritt +
+
+
+

+Zwiebeln und Knoblauch klein schneiden und in Kokosöl in einer Pfanne kurz anbraten. +

+
+
+3. Schritt +
+
+
+

+Kokosmilch und Wasser vorsichtig in die Pfanne schütten. +

+
+
+4. Schritt +
+
+
+

+Süßkartoffel und Paprika klein schneiden und in die Pfanne geben. +

+
+
+5. Schritt +
+
+
+

+Kichererbsen abtropfen, Ingwer schälen und kleinschneiden, ebenfalls in die Pfanne geben. +

+
+
+6. Schritt +
+
+
+

+Curry und Salz hinzugeben und bei geschlossenem Deckel kurz zum Kochen bringen, dann auf leichter Stufe circa 10 Minuten köcheln lassen. +

+
+
+7. Schritt +
+
+
+

+Paprika edelsüß und Cayennepfeffer hinzugeben, verrühren und ca. weitere 5 Minuten köcheln lassen, bis die Soße schön eingekocht ist. +

+
+
+8. Schritt +
+
+
+

+Mit Reis und Kräutern servieren, fertig. Guten Reishunger! +

+
+
+
+
+
+
+
+
+

+Bewertungen & Kommentare +

+
+ + +
+
+
+
+ +
+
+
+A +
+
+
+
+ + + + + + + +
+
+Anonym + +
+
+
+

Super einfach und schnell zubereitet!! Und das Ergebnis schmeckt sehr, sehr gut!!

+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+ + + +
+ +
+
+
+
+
+ +
+Süßkartoffel-Kichererbsen-Curry +
+
+Süßkartoffel-Kichererbsen-Curry +
+
+Süßkartoffel-Kichererbsen-Curry +
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+
+
+

Exklusiv! Digitales Rezeptbuch per E-Mail

+
+
+ +Gratis +
Digitales
Rezeptbuch bei
Anmeldung
+
+
+Gratis bei Newsletter Anmeldung +
+ +
+ +
Bitte nicht ausfüllen
+
+ + + +
+ +
+ +
+
+
+
+

+Mehr Rezepte mit Basmati Reis Pusa +

+
+
+ +
+ +
+
+ + + + + + +
+ + + + + + + + +Sehr gut + + +4.75/5.00 + + + + + + + + + + + + + + +Käuferschutz +inklusive + + +Sehr gut +4.75/5.00 + + +
+ + + + + + + + + + + + + + + + + diff --git a/tests/test_reishunger.py b/tests/test_reishunger_1.py similarity index 71% rename from tests/test_reishunger.py rename to tests/test_reishunger_1.py index 734f4b4cb..7d4f6c7d0 100644 --- a/tests/test_reishunger.py +++ b/tests/test_reishunger_1.py @@ -6,6 +6,10 @@ class TestReishungerScraper(ScraperTest): scraper_class = Reishunger + @property + def test_file_name(self): + return "{}_1".format(self.scraper_class.__name__.lower()) + def test_host(self): self.assertEqual("reishunger.de", self.harvester_class.host()) @@ -23,7 +27,7 @@ def test_yields(self): def test_image(self): self.assertEqual( - "https://www.reishunger.de/upload/123/17835/crispy-tofu-bowl.jpg", + "https://cdn.reishunger.com/crispy-tofu-bowl.jpg?quality=85", self.harvester_class.image(), ) @@ -48,10 +52,10 @@ def test_ingredients(self): ) def test_instructions(self): - self.assertEqual( - "Reis nach Anleitung im Digitalen Reiskocher oder Kochtopf kochen.\nGemüse schneiden und ca. 5 min blanchieren.\nDen Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten.\nCashew Kerne in einer Pfanne kurz anrösten.\nDie Sauce erwärmen und den Tofu auf einen Spieß ziehen (optimal).\nAlles schön anrichten und mit den Sprossen toppen. Guten Reishunger! :-)", + self.assertIn( + "Den Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten.", self.harvester_class.instructions(), ) def test_ratings(self): - self.assertEqual(4, self.harvester_class.ratings()) + self.assertEqual(5, self.harvester_class.ratings()) diff --git a/tests/test_reishunger_2.py b/tests/test_reishunger_2.py new file mode 100644 index 000000000..b9abf9400 --- /dev/null +++ b/tests/test_reishunger_2.py @@ -0,0 +1,62 @@ +from recipe_scrapers.reishunger import Reishunger +from tests import ScraperTest + + +class TestReishungerScraper(ScraperTest): + scraper_class = Reishunger + + @property + def test_file_name(self): + return "{}_2".format(self.scraper_class.__name__.lower()) + + def test_host(self): + self.assertEqual("reishunger.de", self.harvester_class.host()) + + def test_author(self): + self.assertEqual("snackicat", self.harvester_class.author()) + + def test_title(self): + self.assertEqual( + "Süßkartoffel-Kichererbsen-Curry", self.harvester_class.title() + ) + + def test_total_time(self): + self.assertEqual(15, self.harvester_class.total_time()) + + def test_yields(self): + self.assertEqual("3 servings", self.harvester_class.yields()) + + def test_image(self): + self.assertEqual( + "https://cdn.reishunger.com/img7830bearbeitetklein.jpg?quality=85", + self.harvester_class.image(), + ) + + def test_ingredients(self): + self.assertEqual( + [ + "240g Basmati Reis Pusa", + "1 TL Kokosöl", + "1 Dose Bio Kichererbsen", + "200ml Kokosmilch", + "1 Zwiebel", + "1 Knoblauchzehe", + "1 mittelgroße Süßkartoffel (hier: 300g)", + "1 Paprika", + "150ml Wasser", + "20g Ingwer", + "3 TL Curry", + "Salz, Cayenne Pfeffer, Paprika edelsüß", + "Kräuter nach Belieben (hier: Petersilie)", + ], + self.harvester_class.ingredients(), + ) + + def test_instructions(self): + self.assertIn( + "Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt.", + self.harvester_class.instructions(), + ) + + def test_ratings(self): + self.assertEqual(4, self.harvester_class.ratings()) From 0db180a895dc181d17d38147b94ce5d51dc678bf Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Sat, 1 Oct 2022 17:56:30 +0200 Subject: [PATCH 02/10] simplified code change --- recipe_scrapers/reishunger.py | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index 7ec8ed79c..5fea0b148 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -1,5 +1,4 @@ # mypy: disallow_untyped_defs=False -import re from ._abstract import AbstractScraper @@ -30,22 +29,11 @@ def ingredients(self): def instructions(self): elements = self.soup.findAll("div", {"class": "flex flex-col"}) - for ( - e - ) in ( - elements - ): # for recipes that do NOT allow to switch between different cooking methods + # for recipes that do NOT allow to switch between different cooking methods + for e in elements: if "Zubereitung" in e.get_text(): return e.get_text() - result = self.soup.find( - "div", - { - "x-data": "{ isMobile: window.innerWidth < 720, tab: 'kochtopf' }" # noqa - }, - ) # for recipes that offer multiple cooking methods - return re.sub(r"\n{3,}", "\n", result.get_text()) - def ratings(self): block = self.soup.find("div", {"class": "nrating"}) if block: From 0a4c19c837ea4923b7c4863bb0a27a171ad36a91 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Sun, 2 Oct 2022 12:13:46 +0200 Subject: [PATCH 03/10] assertEqulity for tests --- recipe_scrapers/reishunger.py | 2 +- tests/test_reishunger_1.py | 4 ++-- tests/test_reishunger_2.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index 5fea0b148..a6d9d645f 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -32,7 +32,7 @@ def instructions(self): # for recipes that do NOT allow to switch between different cooking methods for e in elements: if "Zubereitung" in e.get_text(): - return e.get_text() + return e.get_text().replace("\xa0", " ") def ratings(self): block = self.soup.find("div", {"class": "nrating"}) diff --git a/tests/test_reishunger_1.py b/tests/test_reishunger_1.py index 7d4f6c7d0..57988b52d 100644 --- a/tests/test_reishunger_1.py +++ b/tests/test_reishunger_1.py @@ -52,8 +52,8 @@ def test_ingredients(self): ) def test_instructions(self): - self.assertIn( - "Den Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten.", + self.assertEqual( + "\n\n\nZubereitung\n\n\n\n\n\n\n\n\n\n1. Schritt\n\n\n\n\nReis nach Anleitung im Digitalen Reiskocher oder Kochtopf kochen.\n\n\n\n2. Schritt\n\n\n\n\nGemüse schneiden und ca. 5 min blanchieren.\n\n\n\n3. Schritt\n\n\n\n\nDen Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten.\n\n\n\n4. Schritt\n\n\n\n\nCashew Kerne in einer Pfanne kurz anrösten.\n\n\n\n5. Schritt\n\n\n\n\nDie Sauce erwärmen und den Tofu auf einen Spieß ziehen (optimal).\n\n\n\n6. Schritt\n\n\n\n\nAlles schön anrichten und mit den Sprossen toppen. Guten Reishunger! :-)\n\n\n\n\n", self.harvester_class.instructions(), ) diff --git a/tests/test_reishunger_2.py b/tests/test_reishunger_2.py index b9abf9400..fcc1f4a5a 100644 --- a/tests/test_reishunger_2.py +++ b/tests/test_reishunger_2.py @@ -53,8 +53,8 @@ def test_ingredients(self): ) def test_instructions(self): - self.assertIn( - "Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt.", + self.assertEqual( + '\n\n\nZubereitung\n\n\n\n\n\n\n\n\n\n1. Schritt\n\n\n\n\n\nAusgewählte Sorte:\n\nBasmati Reis Pusa\n\n\n\n\n\n\n\n\n\n\n\n\n\nKochtopf\n\n\n\n\n\n\n\n\n\n\n\n\n \n\nReiskocher\n\n\n\n\n\n\n\n \n\nMikrowelle\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDämpfer\n\n\n\n\n\n\n\nZubereitung im\nKochtopf\n\n\n\n\nReis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt.\n\n\nReis in einen Kochtopf geben.\n\n\nWasser dazugeben. Nach Belieben salzen.\n\n\nReis 10 Minuten einweichen lassen.\n\n\nHerd auf die höchste Hitzestufe stellen und Reis aufkochen lassen.\n\n\nSobald das Wasser kocht, den Herd auf die mittlere Hitzestufe stellen und den Reis ca. 15 Minuten bei geschlossenem Deckel köcheln lassen bis das Wasser komplett aufgesogen wurde.\n\n\nNach Belieben ein Stück Butter hinzufügen.\n\n\n\n\n\n\n\n\nZubereitung im\n\nReiskocher\n\n\n\n\n\nReis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Anschließend den Reis in den Innentopf geben.\n\n\nReis in den Reiskocher geben.\n\n\nWasser dazugeben. Nach Belieben salzen.\n\n\nDeckel schließen und den Kochvorgang im Modus "Weiß" starten.\n\n\nSobald der Reiskocher in den Warmhaltemodus schaltet, ist der Reis fertig.\n\n\nNach Belieben ein Stück Butter hinzufügen.\n\n\n\n\n\n\n\n\nZubereitung im\n\nMikrowellen-Reiskocher\n\n\n\n\n\nReis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt.\n\n\nReis in den Mikrowellen Reiskocher geben.\n\n\nWasser dazugeben. Nach Belieben salzen.\n\n\nDeckel aufsetzen und bei höchster Stufe (600-800 Watt) für 11 Minuten in die Mikrowelle stellen.\n\n\nNach Belieben ein Stück Butter hinzufügen.\n\n\n\n\n\n\n\n\nZubereitung im\n\nDämpfer\n\n\n\n\n\nReis waschen. Du bedeckst den Reis mit kaltem Wasser. Mit den Händen bearbeitest du den Reis in kreisenden Bewegungen. Durch die überschüssige Stärke wird das Wasser trüb. Nun gießt du das Wasser ab und wiederholst den Vorgang solange bis das Wasser klar bleibt.\n\n\nBambuskorb mit einem Baumwolltuch auslegen und den Reis darauf geben.\n\n\nMit Stäbchen oder Gabel Löcher in die Masse drücken durch die Dampf entweichen kann.\n\n\nBambuskorb mit Korbdeckel schließen. Topfboden mit ca. 1 cm Wasser bedecken und Bambuskorb reinstellen.\n\n\nBei niedriger bis mittlerer Hitze ca. 20 Minuten dämpfen lassen. Zwischenzeitlich Wasser nachkippen, sodass der Korb stetig in ca. 1 cm hohem Wasser steht.\n\n\nReis entnehmen und nach Belieben ein Stück Butter hinzufügen.\n\n\n\n\n\n\n\n\n\n\n2. Schritt\n\n\n\n\nZwiebeln und Knoblauch klein schneiden und in Kokosöl in einer Pfanne kurz anbraten.\n\n\n\n3. Schritt\n\n\n\n\nKokosmilch und Wasser vorsichtig in die Pfanne schütten.\n\n\n\n4. Schritt\n\n\n\n\nSüßkartoffel und Paprika klein schneiden und in die Pfanne geben.\n\n\n\n5. Schritt\n\n\n\n\nKichererbsen abtropfen, Ingwer schälen und kleinschneiden, ebenfalls in die Pfanne geben.\n\n\n\n6. Schritt\n\n\n\n\nCurry und Salz hinzugeben und bei geschlossenem Deckel kurz zum Kochen bringen, dann auf leichter Stufe circa 10 Minuten köcheln lassen.\n\n\n\n7. Schritt\n\n\n\n\nPaprika edelsüß und Cayennepfeffer hinzugeben, verrühren und ca. weitere 5 Minuten köcheln lassen, bis die Soße schön eingekocht ist.\n\n\n\n8. Schritt\n\n\n\n\nMit Reis und Kräutern servieren, fertig. Guten Reishunger!\n\n\n\n\n', self.harvester_class.instructions(), ) From 51f53e327d701375d57ac79c75295f60cadd298b Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 4 Oct 2022 20:51:24 +0200 Subject: [PATCH 04/10] changed loop iterator variable name --- recipe_scrapers/reishunger.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index a6d9d645f..729a091de 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -30,9 +30,9 @@ def instructions(self): elements = self.soup.findAll("div", {"class": "flex flex-col"}) # for recipes that do NOT allow to switch between different cooking methods - for e in elements: - if "Zubereitung" in e.get_text(): - return e.get_text().replace("\xa0", " ") + for element in elements: + if "Zubereitung" in element.get_text(): + return element.get_text().replace("\xa0", " ") def ratings(self): block = self.soup.find("div", {"class": "nrating"}) From 2c1f4efcf0a83141c35f3a182f14998a3326ea36 Mon Sep 17 00:00:00 2001 From: James Addison Date: Wed, 5 Oct 2022 23:31:36 +0100 Subject: [PATCH 05/10] reishunger: identify recipe steps (schritt) and create one instruction for each -- except for special 'preparations' steps which should output multiple instructions --- recipe_scrapers/reishunger.py | 48 +++++++++++++++++++++++++++++++---- tests/test_reishunger_1.py | 17 ++++++++++++- tests/test_reishunger_2.py | 21 ++++++++++++++- 3 files changed, 79 insertions(+), 7 deletions(-) diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index 729a091de..a285ef06f 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -26,13 +26,51 @@ def image(self): def ingredients(self): return self.schema.ingredients() + def _trim_instruction(self, instruction): + instruction = instruction.strip() + while instruction != instruction.replace("\n\n", "\n"): + instruction = instruction.replace("\n\n", "\n") + return instruction + def instructions(self): - elements = self.soup.findAll("div", {"class": "flex flex-col"}) + # find the "instructions" heading (Zubereitung in German) + for heading in self.soup.findAll("h3"): + if "Zubereitung" in heading.get_text(): + break + + results = [] + + # locate the first recipe instruction + content_area = heading.parent.parent + step = content_area.find("div", {"class": "leading-normal"}) + + # iterate through each step in the recipe + while step: + + # check whether the instruction has a list of preparations + # fixme: this can throw an exception if 'step' is not a bs4 Tag + try: + preparations = step.find("div", {"preparation": True}) + except Exception: + preparations = None + + # if it does, add every preparation step as an instruction entry + if preparations: + for preparation in preparations.find("div", {"id": True}): + instruction = self._trim_instruction(preparation.text) + results.append(instruction) + + # otherwise, add only one instruction entry + else: + instruction = self._trim_instruction(step.text) + results.append(instruction) + + # continue on to the next instruction + step = step.next_sibling - # for recipes that do NOT allow to switch between different cooking methods - for element in elements: - if "Zubereitung" in element.get_text(): - return element.get_text().replace("\xa0", " ") + # filter out empty lines + results = [instruction for instruction in results if instruction] + return "\n".join(results) def ratings(self): block = self.soup.find("div", {"class": "nrating"}) diff --git a/tests/test_reishunger_1.py b/tests/test_reishunger_1.py index 57988b52d..34f0dd2bb 100644 --- a/tests/test_reishunger_1.py +++ b/tests/test_reishunger_1.py @@ -53,7 +53,22 @@ def test_ingredients(self): def test_instructions(self): self.assertEqual( - "\n\n\nZubereitung\n\n\n\n\n\n\n\n\n\n1. Schritt\n\n\n\n\nReis nach Anleitung im Digitalen Reiskocher oder Kochtopf kochen.\n\n\n\n2. Schritt\n\n\n\n\nGemüse schneiden und ca. 5 min blanchieren.\n\n\n\n3. Schritt\n\n\n\n\nDen Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten.\n\n\n\n4. Schritt\n\n\n\n\nCashew Kerne in einer Pfanne kurz anrösten.\n\n\n\n5. Schritt\n\n\n\n\nDie Sauce erwärmen und den Tofu auf einen Spieß ziehen (optimal).\n\n\n\n6. Schritt\n\n\n\n\nAlles schön anrichten und mit den Sprossen toppen. Guten Reishunger! :-)\n\n\n\n\n", + "\n".join( + [ + "1. Schritt", + "Reis nach Anleitung im Digitalen Reiskocher oder Kochtopf kochen.", + "2. Schritt", + "Gemüse schneiden und ca. 5 min blanchieren.", + "3. Schritt", + "Den Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten.", + "4. Schritt", + "Cashew Kerne in einer Pfanne kurz anrösten.", + "5. Schritt", + "Die Sauce erwärmen und den Tofu auf einen Spieß ziehen (optimal).", + "6. Schritt", + "Alles schön anrichten und mit den Sprossen toppen. Guten Reishunger! :-)", + ] + ), self.harvester_class.instructions(), ) diff --git a/tests/test_reishunger_2.py b/tests/test_reishunger_2.py index fcc1f4a5a..4469c3cd3 100644 --- a/tests/test_reishunger_2.py +++ b/tests/test_reishunger_2.py @@ -54,7 +54,26 @@ def test_ingredients(self): def test_instructions(self): self.assertEqual( - '\n\n\nZubereitung\n\n\n\n\n\n\n\n\n\n1. Schritt\n\n\n\n\n\nAusgewählte Sorte:\n\nBasmati Reis Pusa\n\n\n\n\n\n\n\n\n\n\n\n\n\nKochtopf\n\n\n\n\n\n\n\n\n\n\n\n\n \n\nReiskocher\n\n\n\n\n\n\n\n \n\nMikrowelle\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDämpfer\n\n\n\n\n\n\n\nZubereitung im\nKochtopf\n\n\n\n\nReis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt.\n\n\nReis in einen Kochtopf geben.\n\n\nWasser dazugeben. Nach Belieben salzen.\n\n\nReis 10 Minuten einweichen lassen.\n\n\nHerd auf die höchste Hitzestufe stellen und Reis aufkochen lassen.\n\n\nSobald das Wasser kocht, den Herd auf die mittlere Hitzestufe stellen und den Reis ca. 15 Minuten bei geschlossenem Deckel köcheln lassen bis das Wasser komplett aufgesogen wurde.\n\n\nNach Belieben ein Stück Butter hinzufügen.\n\n\n\n\n\n\n\n\nZubereitung im\n\nReiskocher\n\n\n\n\n\nReis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Anschließend den Reis in den Innentopf geben.\n\n\nReis in den Reiskocher geben.\n\n\nWasser dazugeben. Nach Belieben salzen.\n\n\nDeckel schließen und den Kochvorgang im Modus "Weiß" starten.\n\n\nSobald der Reiskocher in den Warmhaltemodus schaltet, ist der Reis fertig.\n\n\nNach Belieben ein Stück Butter hinzufügen.\n\n\n\n\n\n\n\n\nZubereitung im\n\nMikrowellen-Reiskocher\n\n\n\n\n\nReis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt.\n\n\nReis in den Mikrowellen Reiskocher geben.\n\n\nWasser dazugeben. Nach Belieben salzen.\n\n\nDeckel aufsetzen und bei höchster Stufe (600-800 Watt) für 11 Minuten in die Mikrowelle stellen.\n\n\nNach Belieben ein Stück Butter hinzufügen.\n\n\n\n\n\n\n\n\nZubereitung im\n\nDämpfer\n\n\n\n\n\nReis waschen. Du bedeckst den Reis mit kaltem Wasser. Mit den Händen bearbeitest du den Reis in kreisenden Bewegungen. Durch die überschüssige Stärke wird das Wasser trüb. Nun gießt du das Wasser ab und wiederholst den Vorgang solange bis das Wasser klar bleibt.\n\n\nBambuskorb mit einem Baumwolltuch auslegen und den Reis darauf geben.\n\n\nMit Stäbchen oder Gabel Löcher in die Masse drücken durch die Dampf entweichen kann.\n\n\nBambuskorb mit Korbdeckel schließen. Topfboden mit ca. 1 cm Wasser bedecken und Bambuskorb reinstellen.\n\n\nBei niedriger bis mittlerer Hitze ca. 20 Minuten dämpfen lassen. Zwischenzeitlich Wasser nachkippen, sodass der Korb stetig in ca. 1 cm hohem Wasser steht.\n\n\nReis entnehmen und nach Belieben ein Stück Butter hinzufügen.\n\n\n\n\n\n\n\n\n\n\n2. Schritt\n\n\n\n\nZwiebeln und Knoblauch klein schneiden und in Kokosöl in einer Pfanne kurz anbraten.\n\n\n\n3. Schritt\n\n\n\n\nKokosmilch und Wasser vorsichtig in die Pfanne schütten.\n\n\n\n4. Schritt\n\n\n\n\nSüßkartoffel und Paprika klein schneiden und in die Pfanne geben.\n\n\n\n5. Schritt\n\n\n\n\nKichererbsen abtropfen, Ingwer schälen und kleinschneiden, ebenfalls in die Pfanne geben.\n\n\n\n6. Schritt\n\n\n\n\nCurry und Salz hinzugeben und bei geschlossenem Deckel kurz zum Kochen bringen, dann auf leichter Stufe circa 10 Minuten köcheln lassen.\n\n\n\n7. Schritt\n\n\n\n\nPaprika edelsüß und Cayennepfeffer hinzugeben, verrühren und ca. weitere 5 Minuten köcheln lassen, bis die Soße schön eingekocht ist.\n\n\n\n8. Schritt\n\n\n\n\nMit Reis und Kräutern servieren, fertig. Guten Reishunger!\n\n\n\n\n', + "\n".join( + [ + "1. Schritt", + "Zubereitung im\nKochtopf\nReis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt.\nReis in einen Kochtopf geben.\nWasser dazugeben. Nach Belieben salzen.\nReis 10 Minuten einweichen lassen.\nHerd auf die höchste Hitzestufe stellen und Reis aufkochen lassen.\nSobald das Wasser kocht, den Herd auf die mittlere Hitzestufe stellen und den Reis ca. 15 Minuten bei geschlossenem Deckel köcheln lassen bis das Wasser komplett aufgesogen wurde.\nNach Belieben ein Stück Butter hinzufügen.", + "2. Schritt", + "Zwiebeln und Knoblauch klein schneiden und in Kokosöl in einer Pfanne kurz anbraten.", + "3. Schritt", + "Kokosmilch und Wasser vorsichtig in die Pfanne schütten.", + "4. Schritt", + "Süßkartoffel und Paprika klein schneiden und in die Pfanne geben.", + "5. Schritt", + "Kichererbsen abtropfen, Ingwer schälen und kleinschneiden, ebenfalls in die Pfanne geben.", + "6. Schritt", + "Curry und Salz hinzugeben und bei geschlossenem Deckel kurz zum Kochen bringen, dann auf leichter Stufe circa 10 Minuten köcheln lassen.", + "7. Schritt", + "Paprika edelsüß und Cayennepfeffer hinzugeben, verrühren und ca. weitere 5 Minuten köcheln lassen, bis die Soße schön eingekocht ist.", + "8. Schritt", + "Mit Reis und Kräutern servieren, fertig. Guten Reishunger!", + ] + ), self.harvester_class.instructions(), ) From c0314d33c58ecc495f5615849ea948c8c28a58d3 Mon Sep 17 00:00:00 2001 From: James Addison Date: Wed, 5 Oct 2022 23:45:38 +0100 Subject: [PATCH 06/10] Fixup: why didn't I use normalize_string originally? :) --- recipe_scrapers/reishunger.py | 11 +++-------- tests/test_reishunger_2.py | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index a285ef06f..cbd4d34d4 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -1,6 +1,7 @@ # mypy: disallow_untyped_defs=False from ._abstract import AbstractScraper +from ._utils import normalize_string class Reishunger(AbstractScraper): @@ -26,12 +27,6 @@ def image(self): def ingredients(self): return self.schema.ingredients() - def _trim_instruction(self, instruction): - instruction = instruction.strip() - while instruction != instruction.replace("\n\n", "\n"): - instruction = instruction.replace("\n\n", "\n") - return instruction - def instructions(self): # find the "instructions" heading (Zubereitung in German) for heading in self.soup.findAll("h3"): @@ -57,12 +52,12 @@ def instructions(self): # if it does, add every preparation step as an instruction entry if preparations: for preparation in preparations.find("div", {"id": True}): - instruction = self._trim_instruction(preparation.text) + instruction = normalize_string(preparation.text) results.append(instruction) # otherwise, add only one instruction entry else: - instruction = self._trim_instruction(step.text) + instruction = normalize_string(step.text) results.append(instruction) # continue on to the next instruction diff --git a/tests/test_reishunger_2.py b/tests/test_reishunger_2.py index 4469c3cd3..b41f0d1c0 100644 --- a/tests/test_reishunger_2.py +++ b/tests/test_reishunger_2.py @@ -57,7 +57,7 @@ def test_instructions(self): "\n".join( [ "1. Schritt", - "Zubereitung im\nKochtopf\nReis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt.\nReis in einen Kochtopf geben.\nWasser dazugeben. Nach Belieben salzen.\nReis 10 Minuten einweichen lassen.\nHerd auf die höchste Hitzestufe stellen und Reis aufkochen lassen.\nSobald das Wasser kocht, den Herd auf die mittlere Hitzestufe stellen und den Reis ca. 15 Minuten bei geschlossenem Deckel köcheln lassen bis das Wasser komplett aufgesogen wurde.\nNach Belieben ein Stück Butter hinzufügen.", + "Zubereitung im Kochtopf Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Reis in einen Kochtopf geben. Wasser dazugeben. Nach Belieben salzen. Reis 10 Minuten einweichen lassen. Herd auf die höchste Hitzestufe stellen und Reis aufkochen lassen. Sobald das Wasser kocht, den Herd auf die mittlere Hitzestufe stellen und den Reis ca. 15 Minuten bei geschlossenem Deckel köcheln lassen bis das Wasser komplett aufgesogen wurde. Nach Belieben ein Stück Butter hinzufügen.", "2. Schritt", "Zwiebeln und Knoblauch klein schneiden und in Kokosöl in einer Pfanne kurz anbraten.", "3. Schritt", From 16e78fc4e1e6b3bb4dbe92ff321d47e30030b27f Mon Sep 17 00:00:00 2001 From: James Addison Date: Thu, 6 Oct 2022 16:07:06 +0100 Subject: [PATCH 07/10] Fixup: use 'findAll' instead of 'find' during retrieval of preparation steps --- recipe_scrapers/reishunger.py | 2 +- tests/test_reishunger_2.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index cbd4d34d4..de8513f52 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -51,7 +51,7 @@ def instructions(self): # if it does, add every preparation step as an instruction entry if preparations: - for preparation in preparations.find("div", {"id": True}): + for preparation in preparations.findAll("div", {"id": True}): instruction = normalize_string(preparation.text) results.append(instruction) diff --git a/tests/test_reishunger_2.py b/tests/test_reishunger_2.py index b41f0d1c0..13217ed04 100644 --- a/tests/test_reishunger_2.py +++ b/tests/test_reishunger_2.py @@ -58,6 +58,9 @@ def test_instructions(self): [ "1. Schritt", "Zubereitung im Kochtopf Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Reis in einen Kochtopf geben. Wasser dazugeben. Nach Belieben salzen. Reis 10 Minuten einweichen lassen. Herd auf die höchste Hitzestufe stellen und Reis aufkochen lassen. Sobald das Wasser kocht, den Herd auf die mittlere Hitzestufe stellen und den Reis ca. 15 Minuten bei geschlossenem Deckel köcheln lassen bis das Wasser komplett aufgesogen wurde. Nach Belieben ein Stück Butter hinzufügen.", + 'Zubereitung im Reiskocher Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Anschließend den Reis in den Innentopf geben. Reis in den Reiskocher geben. Wasser dazugeben. Nach Belieben salzen. Deckel schließen und den Kochvorgang im Modus "Weiß" starten. Sobald der Reiskocher in den Warmhaltemodus schaltet, ist der Reis fertig. Nach Belieben ein Stück Butter hinzufügen.', + "Zubereitung im Mikrowellen-Reiskocher Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Reis in den Mikrowellen Reiskocher geben. Wasser dazugeben. Nach Belieben salzen. Deckel aufsetzen und bei höchster Stufe (600-800 Watt) für 11 Minuten in die Mikrowelle stellen. Nach Belieben ein Stück Butter hinzufügen.", + "Zubereitung im Dämpfer Reis waschen. Du bedeckst den Reis mit kaltem Wasser. Mit den Händen bearbeitest du den Reis in kreisenden Bewegungen. Durch die überschüssige Stärke wird das Wasser trüb. Nun gießt du das Wasser ab und wiederholst den Vorgang solange bis das Wasser klar bleibt. Bambuskorb mit einem Baumwolltuch auslegen und den Reis darauf geben. Mit Stäbchen oder Gabel Löcher in die Masse drücken durch die Dampf entweichen kann. Bambuskorb mit Korbdeckel schließen. Topfboden mit ca. 1 cm Wasser bedecken und Bambuskorb reinstellen. Bei niedriger bis mittlerer Hitze ca. 20 Minuten dämpfen lassen. Zwischenzeitlich Wasser nachkippen, sodass der Korb stetig in ca. 1 cm hohem Wasser steht. Reis entnehmen und nach Belieben ein Stück Butter hinzufügen.", "2. Schritt", "Zwiebeln und Knoblauch klein schneiden und in Kokosöl in einer Pfanne kurz anbraten.", "3. Schritt", From 97298d40fc50ab232d1a4fd71dfb0f081157f194 Mon Sep 17 00:00:00 2001 From: James Addison Date: Wed, 12 Oct 2022 16:23:00 +0100 Subject: [PATCH 08/10] Update test expectations --- tests/test_reishunger_1.py | 6 ------ tests/test_reishunger_2.py | 8 -------- 2 files changed, 14 deletions(-) diff --git a/tests/test_reishunger_1.py b/tests/test_reishunger_1.py index 34f0dd2bb..12b2981be 100644 --- a/tests/test_reishunger_1.py +++ b/tests/test_reishunger_1.py @@ -55,17 +55,11 @@ def test_instructions(self): self.assertEqual( "\n".join( [ - "1. Schritt", "Reis nach Anleitung im Digitalen Reiskocher oder Kochtopf kochen.", - "2. Schritt", "Gemüse schneiden und ca. 5 min blanchieren.", - "3. Schritt", "Den Tofu in Stücke schneiden und in Mehl Ei und Paniermehl wälzen und kurz von allen Seiten anbraten.", - "4. Schritt", "Cashew Kerne in einer Pfanne kurz anrösten.", - "5. Schritt", "Die Sauce erwärmen und den Tofu auf einen Spieß ziehen (optimal).", - "6. Schritt", "Alles schön anrichten und mit den Sprossen toppen. Guten Reishunger! :-)", ] ), diff --git a/tests/test_reishunger_2.py b/tests/test_reishunger_2.py index 13217ed04..29edd897c 100644 --- a/tests/test_reishunger_2.py +++ b/tests/test_reishunger_2.py @@ -56,24 +56,16 @@ def test_instructions(self): self.assertEqual( "\n".join( [ - "1. Schritt", "Zubereitung im Kochtopf Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Reis in einen Kochtopf geben. Wasser dazugeben. Nach Belieben salzen. Reis 10 Minuten einweichen lassen. Herd auf die höchste Hitzestufe stellen und Reis aufkochen lassen. Sobald das Wasser kocht, den Herd auf die mittlere Hitzestufe stellen und den Reis ca. 15 Minuten bei geschlossenem Deckel köcheln lassen bis das Wasser komplett aufgesogen wurde. Nach Belieben ein Stück Butter hinzufügen.", 'Zubereitung im Reiskocher Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Anschließend den Reis in den Innentopf geben. Reis in den Reiskocher geben. Wasser dazugeben. Nach Belieben salzen. Deckel schließen und den Kochvorgang im Modus "Weiß" starten. Sobald der Reiskocher in den Warmhaltemodus schaltet, ist der Reis fertig. Nach Belieben ein Stück Butter hinzufügen.', "Zubereitung im Mikrowellen-Reiskocher Reis waschen. Den Reis mit kaltem Wasser bedecken. Mit den Händen den Reis in kreisenden Bewegungen waschen. Durch die überschüssige Stärke wird das Wasser trüb. Nun das Wasser abgießen und den Vorgang wiederholen bis das Wasser klar bleibt. Reis in den Mikrowellen Reiskocher geben. Wasser dazugeben. Nach Belieben salzen. Deckel aufsetzen und bei höchster Stufe (600-800 Watt) für 11 Minuten in die Mikrowelle stellen. Nach Belieben ein Stück Butter hinzufügen.", "Zubereitung im Dämpfer Reis waschen. Du bedeckst den Reis mit kaltem Wasser. Mit den Händen bearbeitest du den Reis in kreisenden Bewegungen. Durch die überschüssige Stärke wird das Wasser trüb. Nun gießt du das Wasser ab und wiederholst den Vorgang solange bis das Wasser klar bleibt. Bambuskorb mit einem Baumwolltuch auslegen und den Reis darauf geben. Mit Stäbchen oder Gabel Löcher in die Masse drücken durch die Dampf entweichen kann. Bambuskorb mit Korbdeckel schließen. Topfboden mit ca. 1 cm Wasser bedecken und Bambuskorb reinstellen. Bei niedriger bis mittlerer Hitze ca. 20 Minuten dämpfen lassen. Zwischenzeitlich Wasser nachkippen, sodass der Korb stetig in ca. 1 cm hohem Wasser steht. Reis entnehmen und nach Belieben ein Stück Butter hinzufügen.", - "2. Schritt", "Zwiebeln und Knoblauch klein schneiden und in Kokosöl in einer Pfanne kurz anbraten.", - "3. Schritt", "Kokosmilch und Wasser vorsichtig in die Pfanne schütten.", - "4. Schritt", "Süßkartoffel und Paprika klein schneiden und in die Pfanne geben.", - "5. Schritt", "Kichererbsen abtropfen, Ingwer schälen und kleinschneiden, ebenfalls in die Pfanne geben.", - "6. Schritt", "Curry und Salz hinzugeben und bei geschlossenem Deckel kurz zum Kochen bringen, dann auf leichter Stufe circa 10 Minuten köcheln lassen.", - "7. Schritt", "Paprika edelsüß und Cayennepfeffer hinzugeben, verrühren und ca. weitere 5 Minuten köcheln lassen, bis die Soße schön eingekocht ist.", - "8. Schritt", "Mit Reis und Kräutern servieren, fertig. Guten Reishunger!", ] ), From eaf05d086a287ec3ac317b151841d92f725ba342 Mon Sep 17 00:00:00 2001 From: James Addison Date: Wed, 12 Oct 2022 16:28:03 +0100 Subject: [PATCH 09/10] reishunger: skip low-information instructions that contain only the text '. Schritt' (' Step') --- recipe_scrapers/reishunger.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index de8513f52..b7e56bcdf 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -57,8 +57,9 @@ def instructions(self): # otherwise, add only one instruction entry else: - instruction = normalize_string(step.text) - results.append(instruction) + if step.find("p"): + instruction = normalize_string(step.text) + results.append(instruction) # continue on to the next instruction step = step.next_sibling From 6befc1d3973277141cce7695bbd8a984ad4b7686 Mon Sep 17 00:00:00 2001 From: James Addison Date: Wed, 12 Oct 2022 16:49:47 +0100 Subject: [PATCH 10/10] Refactor: remove use of 'while' loop --- recipe_scrapers/reishunger.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/recipe_scrapers/reishunger.py b/recipe_scrapers/reishunger.py index b7e56bcdf..c44c0c4ce 100644 --- a/recipe_scrapers/reishunger.py +++ b/recipe_scrapers/reishunger.py @@ -36,11 +36,10 @@ def instructions(self): results = [] # locate the first recipe instruction - content_area = heading.parent.parent - step = content_area.find("div", {"class": "leading-normal"}) + step1 = heading.parent.parent.find("div", {"class": "leading-normal"}) # iterate through each step in the recipe - while step: + for step in step1.next_siblings: # check whether the instruction has a list of preparations # fixme: this can throw an exception if 'step' is not a bs4 Tag