-
Notifications
You must be signed in to change notification settings - Fork 507
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
1,578 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
# mypy: allow-untyped-defs | ||
|
||
from ._abstract import AbstractScraper | ||
from ._utils import normalize_string | ||
|
||
|
||
class FelixKitchen(AbstractScraper): | ||
@classmethod | ||
def host(cls): | ||
return "felix.kitchen" | ||
|
||
def author(self): | ||
return "FEL!X KITCHEN" | ||
|
||
def title(self): | ||
found = self.soup.find("meta", {"property": "og:title"}) | ||
return normalize_string(found.get("content")) | ||
|
||
def category(self): | ||
return self.schema.category() | ||
|
||
def total_time(self): | ||
return None | ||
|
||
def yields(self): | ||
heading_p = self.soup.find("p", {"class": "ti"}) | ||
container_p = heading_p.find_next_sibling("p") | ||
yields_strong = container_p.find("strong") | ||
return yields_strong.text | ||
|
||
def image(self): | ||
return self.schema.image() | ||
|
||
def ingredients(self): | ||
ingredients = [] | ||
|
||
step_divs = self._get_step_divs() | ||
for step_div in step_divs: | ||
ingredients_div = step_div.find("div") | ||
ingredients_em_list = ingredients_div.find_all("em") | ||
for ingredients_em in ingredients_em_list: | ||
ingredients_text = normalize_string(ingredients_em.text).lstrip("• ") | ||
ingredients.extend(ingredients_text.split("• ")) | ||
|
||
return ingredients | ||
|
||
def instructions(self): | ||
instruction_lines = [] | ||
|
||
step_divs = self._get_step_divs() | ||
for step_div in step_divs: | ||
instructions_div = step_div.find_all("div")[1] | ||
instructions_p_list = instructions_div.find_all("p") | ||
for instruction_p in instructions_p_list: | ||
for br in instruction_p.find_all("br"): | ||
br.replace_with("\n") | ||
|
||
lines = instruction_p.text.split("\n") | ||
for line in lines: | ||
instruction_lines.append(normalize_string(line)) | ||
|
||
return "\n".join(instruction_lines) | ||
|
||
def description(self): | ||
content_div = self.soup.find("div", {"class": "entry-content"}) | ||
lines = [] | ||
for child in content_div.findChildren(recursive=False): | ||
if child.name != "p": | ||
break | ||
|
||
lines.append(child.text) | ||
return "\n".join(lines) | ||
|
||
def _get_step_divs(self): | ||
return self.soup.select('div[class*="wp-block-columns is-layout-flex"]') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
{ | ||
"author": "FEL!X KITCHEN", | ||
"canonical_url": "https://felix.kitchen/2024/04/07/piccata-milanese-schnitzel-parmesan-safran-risotto-petersilie/", | ||
"host": "felix.kitchen", | ||
"description": "Ob das Schnitzel nach Mailänder-Art original italienisch ist, oder ob die Panade nördlich der Alpen mit Parmesan sozusagen «italienisiert» wurde, bleibt dahingestellt.\nTatsache ist: die so umhüllten und gebratenen Schnitzelchen sind ganz einfach lecker! Und was könnte dazu besser passen, als ein goldgelber Safran-Risotto?!", | ||
"image": "https://felix.kitchen/wp-content/uploads/2023/09/piccata_milanese_beitragsbild.jpg", | ||
"ingredients": [ | ||
"15 g Parmesan am Stück", | ||
"1/2 unbehandelte Zitrone", | ||
"1 Ei (kl.)", | ||
"1 EL Wasser", | ||
"1–2 EL Weizenmehl", | ||
"1 TL Senf, mittelscharf", | ||
"Salz, Pfeffer aus der Mühle", | ||
"2 Kalbs- oder Schweineschnitzel à ca. 125 g", | ||
"Salz, Pfeffer aus der Mühle", | ||
"Weizen- oder Reismehl", | ||
"1 EL Olivenöl", | ||
"1 EL Butter", | ||
"etwas glatte Petersilie" | ||
], | ||
"ingredient_groups": [ | ||
{ | ||
"ingredients": [ | ||
"15 g Parmesan am Stück", | ||
"1/2 unbehandelte Zitrone", | ||
"1 Ei (kl.)", | ||
"1 EL Wasser", | ||
"1–2 EL Weizenmehl", | ||
"1 TL Senf, mittelscharf", | ||
"Salz, Pfeffer aus der Mühle", | ||
"2 Kalbs- oder Schweineschnitzel à ca. 125 g", | ||
"Salz, Pfeffer aus der Mühle", | ||
"Weizen- oder Reismehl", | ||
"1 EL Olivenöl", | ||
"1 EL Butter", | ||
"etwas glatte Petersilie" | ||
], | ||
"purpose": null | ||
} | ||
], | ||
"instructions": "1PICCATA-TEIG:\nParmesan sehr fein reiben (Micro-Zestenreibe!), ebenfalls die Schale der halben Zitrone.\nMit den weiteren Zutaten mischen, kurz ruhen lassen.\nDer Teig sollte nicht allzu dick sein.\n2Fleisch nach Belieben in kleinere Stücke schneiden, zwischen Klarsichtfolie leicht plattieren, es sollte nicht zu dünn werden (Fleischklopfer oder Pfannenboden).\nSaft der Zitronenhälfte auspressen, das Fleisch darin kurz marinieren.\nKann bis hierher vorbereitet werden!\n3Fleisch zwischen Küchenpapier trocknen, würzen.\nIm Mehl wenden, dann durch den Teig ziehen, was am einfachsten mit der Kochpinzette geschieht.\n4Portionenweise in der Öl-Butter-Mischung beidseitig ausbacken.\nAuf Küchenpapier abtropfen lassen.\nIm Ofen bei 80 °C (O+U) warm stellen.\n5Währenddessen einen Safran-Risotto zubereiten, siehe hier.\n6Risotto zusammen mit der Piccata anrichten.\nMit gehackter Petersilie bestreuen.\nnicht scharf", | ||
"instructions_list": [ | ||
"1PICCATA-TEIG:", | ||
"Parmesan sehr fein reiben (Micro-Zestenreibe!), ebenfalls die Schale der halben Zitrone.", | ||
"Mit den weiteren Zutaten mischen, kurz ruhen lassen.", | ||
"Der Teig sollte nicht allzu dick sein.", | ||
"2Fleisch nach Belieben in kleinere Stücke schneiden, zwischen Klarsichtfolie leicht plattieren, es sollte nicht zu dünn werden (Fleischklopfer oder Pfannenboden).", | ||
"Saft der Zitronenhälfte auspressen, das Fleisch darin kurz marinieren.", | ||
"Kann bis hierher vorbereitet werden!", | ||
"3Fleisch zwischen Küchenpapier trocknen, würzen.", | ||
"Im Mehl wenden, dann durch den Teig ziehen, was am einfachsten mit der Kochpinzette geschieht.", | ||
"4Portionenweise in der Öl-Butter-Mischung beidseitig ausbacken.", | ||
"Auf Küchenpapier abtropfen lassen.", | ||
"Im Ofen bei 80 °C (O+U) warm stellen.", | ||
"5Währenddessen einen Safran-Risotto zubereiten, siehe hier.", | ||
"6Risotto zusammen mit der Piccata anrichten.", | ||
"Mit gehackter Petersilie bestreuen.", | ||
"nicht scharf" | ||
], | ||
"language": "de-DE", | ||
"site_name": "FEL!X KITCHEN", | ||
"title": "PICCATA ALLA MILANESE", | ||
"total_time": null, | ||
"yields": "2 Portionen als Hauptgericht" | ||
} |
Oops, something went wrong.