-
Notifications
You must be signed in to change notification settings - Fork 517
/
__init__.py
521 lines (501 loc) · 19.3 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
from __future__ import annotations
import contextlib
from typing import Any, Optional
from ._abstract import AbstractScraper
from ._exceptions import NoSchemaFoundInWildMode, WebsiteNotImplementedError
from ._factory import SchemaScraperFactory
from ._utils import get_host_name
from .abril import Abril
from .acouplecooks import ACoupleCooks
from .afghankitchenrecipes import AfghanKitchenRecipes
from .akispetretzikis import AkisPetretzikis
from .albertheijn import AlbertHeijn
from .allrecipes import AllRecipes
from .alltomat import AllTomat
from .altonbrown import AltonBrown
from .amazingribs import AmazingRibs
from .ambitiouskitchen import AmbitiousKitchen
from .archanaskitchen import ArchanasKitchen
from .arla import Arla
from .atelierdeschefs import AtelierDesChefs
from .averiecooks import AverieCooks
from .bakingmischeif import BakingMischeif
from .bakingsense import BakingSense
from .bbcfood import BBCFood
from .bbcgoodfood import BBCGoodFood
from .bettybossi import BettyBossi
from .bettycrocker import BettyCrocker
from .bigoven import BigOven
from .blueapron import BlueApron
from .bodybuilding import Bodybuilding
from .bonappetit import BonAppetit
from .bowlofdelicious import BowlOfDelicious
from .budgetbytes import BudgetBytes
from .castironketo import CastIronKeto
from .cdkitchen import CdKitchen
from .chefkoch import Chefkoch
from .closetcooking import ClosetCooking
from .comidinhasdochef import ComidinhasDoChef
from .cookeatshare import CookEatShare
from .cookieandkate import CookieAndKate
from .cookingcircle import CookingCircle
from .cookinglight import CookingLight
from .cookpad import CookPad
from .cookstr import Cookstr
from .coop import Coop
from .copykat import CopyKat
from .countryliving import CountryLiving
from .cucchiaio import Cucchiaio
from .cuisineaz import CuisineAZ
from .cybercook import Cybercook
from .davidlebovitz import DavidLebovitz
from .delish import Delish
from .ditchthecarbs import DitchTheCarbs
from .domesticateme import DomesticateMe
from .downshiftology import Downshiftology
from .dr import Dr
from .eatingbirdfood import EatingBirdFood
from .eatingwell import EatingWell
from .eatsmarter import Eatsmarter
from .eatwhattonight import EatWhatTonight
from .emmikochteinfach import EmmiKochtEinfach
from .epicurious import Epicurious
from .ethanchlebowski import EthanChlebowski
from .farmhousedelivery import FarmhouseDelivery
from .fifteenspatulas import FifteenSpatulas
from .finedininglovers import FineDiningLovers
from .fitmencook import FitMenCook
from .food import Food
from .food52 import Food52
from .foodandwine import FoodAndWine
from .foodnetwork import FoodNetwork
from .foodrepublic import FoodRepublic
from .forksoverknives import ForksOverKnives
from .franzoesischkochen import FranzoesischKochen
from .fredriksfikaallas import FredriksFikaAllas
from .g750g import G750g
from .geniuskitchen import GeniusKitchen
from .giallozafferano import GialloZafferano
from .gimmesomeoven import GimmeSomeOven
from .globo import Globo
from .gonnawantseconds import GonnaWantSeconds
from .goustojson import GoustoJson
from .greatbritishchefs import GreatBritishChefs
from .halfbakedharvest import HalfBakedHarvest
from .handletheheat import HandleTheHeat
from .hassanchef import HassanChef
from .headbangerskitchen import HeadbangersKitchen
from .heb import HEB
from .heinzbrasil import HeinzBrasil
from .hellofresh import HelloFresh
from .homechef import HomeChef
from .hostthetoast import Hostthetoast
from .hundredandonecookbooks import HundredAndOneCookbooks
from .ica import Ica
from .ig import IG
from .imworthy import ImWorthy
from .indianhealthyrecipes import IndianHealthyRecipes
from .innit import Innit
from .inspiralized import Inspiralized
from .jamieoliver import JamieOliver
from .jimcooksfoodgood import JimCooksFoodGood
from .joyfoodsunshine import Joyfoodsunshine
from .justataste import JustATaste
from .justbento import JustBento
from .justonecookbook import JustOneCookbook
from .kennymcgovern import KennyMcGovern
from .kingarthur import KingArthur
from .kitchenstories import KitchenStories
from .kochbar import Kochbar
from .koket import Koket
from .kptncook import KptnCook
from .kuchniadomowa import KuchniaDomowa
from .kwestiasmaku import KwestiaSmaku
from .latelierderoxane import LAtelierDeRoxane
from .leanandgreenrecipes import LeanAndGreenRecipes
from .lecker import Lecker
from .lecremedelacrumb import LeCremeDeLaCrumb
from .lekkerensimpel import LekkerEnSimpel
from .littlespicejar import LittleSpiceJar
from .livelytable import LivelyTable
from .lovingitvegan import Lovingitvegan
from .maangchi import Maangchi
from .madensverden import MadensVerden
from .madewithlau import MadeWithLau
from .marleyspoon import MarleySpoon
from .marmiton import Marmiton
from .marthastewart import MarthaStewart
from .matprat import Matprat
from .meljoulwan import Meljoulwan
from .melskitchencafe import MelsKitchenCafe
from .mindmegette import Mindmegette
from .minimalistbaker import Minimalistbaker
from .misya import Misya
from .mobkitchen import MobKitchen
from .momswithcrockpots import MomsWithCrockPots
from .monsieurcuisine import MonsieurCuisine
from .motherthyme import MotherThyme
from .mybakingaddiction import MyBakingAddiction
from .mykitchen101 import MyKitchen101
from .mykitchen101en import MyKitchen101en
from .myrecipes import MyRecipes
from .nhshealthierfamilies import NHSHealthierFamilies
from .nihhealthyeating import NIHHealthyEating
from .nourishedbynutrition import NourishedByNutrition
from .nutritionbynathalie import NutritionByNathalie
from .nytimes import NYTimes
from .ohsheglows import OhSheGlows
from .omnivorescookbook import OmnivoresCookbook
from .onehundredonecookbooks import OneHundredOneCookBooks
from .owenhan import OwenHan
from .paleorunningmomma import PaleoRunningMomma
from .panelinha import Panelinha
from .paninihappy import PaniniHappy
from .pingodoce import PingoDoce
from .popsugar import PopSugar
from .practicalselfreliance import PracticalSelfReliance
from .primaledgehealth import PrimalEdgeHealth
from .przepisy import Przepisy
from .purelypope import PurelyPope
from .purplecarrot import PurpleCarrot
from .rachlmansfield import RachlMansfield
from .rainbowplantlife import RainbowPlantLife
from .realfoodtesco import RealFoodTesco
from .realsimple import RealSimple
from .recipetineats import RecipeTinEats
from .redhousespice import RedHouseSpice
from .reishunger import Reishunger
from .rezeptwelt import Rezeptwelt
from .rosannapansino import RosannaPansino
from .sallysbakingaddiction import SallysBakingAddiction
from .saveur import Saveur
from .seriouseats import SeriousEats
from .simpleveganista import SimpleVeganista
from .simplycookit import SimplyCookit
from .simplyquinoa import SimplyQuinoa
from .simplyrecipes import SimplyRecipes
from .simplywhisked import SimplyWhisked
from .skinnytaste import SkinnyTaste
from .smulweb import Smulweb
from .southerncastiron import SouthernCastIron
from .southernliving import SouthernLiving
from .spendwithpennies import SpendWithPennies
from .springlane import Springlane
from .steamykitchen import SteamyKitchen
from .streetkitchen import StreetKitchen
from .sunbasket import SunBasket
from .sundpaabudget import SundPaaBudget
from .sunset import Sunset
from .sweetcsdesigns import SweetCsDesigns
from .sweetpeasandsaffron import SweetPeasAndSaffron
from .tasteofhome import TasteOfHome
from .tastesbetterfromscratch import TastesBetterFromScratch
from .tastesoflizzyt import TastesOfLizzyT
from .tasty import Tasty
from .tastykitchen import TastyKitchen
from .theclevercarrot import TheCleverCarrot
from .thehappyfoodie import TheHappyFoodie
from .thekitchenmagpie import TheKitchenMagPie
from .thekitchn import TheKitchn
from .thenutritiouskitchen import TheNutritiousKitchen
from .thepioneerwoman import ThePioneerWoman
from .thespruceeats import TheSpruceEats
from .thevintagemixer import TheVintageMixer
from .thewoksoflife import Thewoksoflife
from .timesofindia import TimesOfIndia
from .tineno import TineNo
from .tudogostoso import TudoGostoso
from .twopeasandtheirpod import TwoPeasAndTheirPod
from .usdamyplate import USDAMyPlate
from .valdemarsro import Valdemarsro
from .vanillaandbean import VanillaAndBean
from .vegolosi import Vegolosi
from .vegrecipesofindia import VegRecipesOfIndia
from .watchwhatueat import WatchWhatUEat
from .whatsgabycooking import WhatsGabyCooking
from .wholefoods import WholeFoods
from .wikicookbook import WikiCookbook
from .woolworths import Woolworths
from .woop import Woop
from .yemek import Yemek
from .yummly import Yummly
from .zeitwochenmarkt import ZeitWochenmarkt
from .zenbelly import ZenBelly
SCRAPERS = {
ACoupleCooks.host(): ACoupleCooks,
Abril.host(): Abril,
AfghanKitchenRecipes.host(): AfghanKitchenRecipes,
AkisPetretzikis.host(): AkisPetretzikis,
AlbertHeijn.host(): AlbertHeijn,
AllRecipes.host(): AllRecipes,
AllTomat.host(): AllTomat,
AltonBrown.host(): AltonBrown,
AmazingRibs.host(): AmazingRibs,
AmbitiousKitchen.host(): AmbitiousKitchen,
ArchanasKitchen.host(): ArchanasKitchen,
Arla.host(): Arla,
AtelierDesChefs.host(): AtelierDesChefs,
AverieCooks.host(): AverieCooks,
BBCFood.host(): BBCFood,
BBCFood.host(domain="co.uk"): BBCFood,
BBCGoodFood.host(): BBCGoodFood,
BakingSense.host(): BakingSense,
BakingMischeif.host(): BakingMischeif,
BettyBossi.host(): BettyBossi,
BettyCrocker.host(): BettyCrocker,
BigOven.host(): BigOven,
BlueApron.host(): BlueApron,
Bodybuilding.host(): Bodybuilding,
BonAppetit.host(): BonAppetit,
BowlOfDelicious.host(): BowlOfDelicious,
BudgetBytes.host(): BudgetBytes,
CastIronKeto.host(): CastIronKeto,
CdKitchen.host(): CdKitchen,
Chefkoch.host(): Chefkoch,
ClosetCooking.host(): ClosetCooking,
ComidinhasDoChef.host(): ComidinhasDoChef,
CookEatShare.host(): CookEatShare,
CookPad.host(): CookPad,
CookieAndKate.host(): CookieAndKate,
CookingCircle.host(): CookingCircle,
CookingLight.host(): CookingLight,
Cookstr.host(): Cookstr,
Coop.host(): Coop,
CopyKat.host(): CopyKat,
CountryLiving.host(): CountryLiving,
Cucchiaio.host(): Cucchiaio,
CuisineAZ.host(): CuisineAZ,
Cybercook.host(): Cybercook,
DavidLebovitz.host(): DavidLebovitz,
Delish.host(): Delish,
DitchTheCarbs.host(): DitchTheCarbs,
DomesticateMe.host(): DomesticateMe,
Downshiftology.host(): Downshiftology,
Dr.host(): Dr,
EatWhatTonight.host(): EatWhatTonight,
EatingBirdFood.host(): EatingBirdFood,
EatingWell.host(): EatingWell,
Eatsmarter.host(): Eatsmarter,
Eatsmarter.host(domain="de"): Eatsmarter,
EmmiKochtEinfach.host(): EmmiKochtEinfach,
Epicurious.host(): Epicurious,
EthanChlebowski.host(): EthanChlebowski,
FarmhouseDelivery.host(): FarmhouseDelivery,
FifteenSpatulas.host(): FifteenSpatulas,
FineDiningLovers.host(): FineDiningLovers,
FitMenCook.host(): FitMenCook,
Food.host(): Food,
Food52.host(): Food52,
FoodAndWine.host(): FoodAndWine,
FoodNetwork.host(): FoodNetwork,
FoodRepublic.host(): FoodRepublic,
ForksOverKnives.host(): ForksOverKnives,
FranzoesischKochen.host(): FranzoesischKochen,
FredriksFikaAllas.host(): FredriksFikaAllas,
G750g.host(): G750g,
GeniusKitchen.host(): GeniusKitchen,
GialloZafferano.host(): GialloZafferano,
GimmeSomeOven.host(): GimmeSomeOven,
Globo.host(): Globo,
GonnaWantSeconds.host(): GonnaWantSeconds,
GoustoJson.host(): GoustoJson,
GreatBritishChefs.host(): GreatBritishChefs,
HEB.host(): HEB,
HalfBakedHarvest.host(): HalfBakedHarvest,
HandleTheHeat.host(): HandleTheHeat,
HassanChef.host(): HassanChef,
HeadbangersKitchen.host(): HeadbangersKitchen,
HeinzBrasil.host(): HeinzBrasil,
HelloFresh.host(): HelloFresh,
HelloFresh.host(domain="co.uk"): HelloFresh,
HelloFresh.host(domain="de"): HelloFresh,
HelloFresh.host(domain="fr"): HelloFresh,
HelloFresh.host(domain="nl"): HelloFresh,
HomeChef.host(): HomeChef,
Hostthetoast.host(): Hostthetoast,
HundredAndOneCookbooks.host(): HundredAndOneCookbooks,
Ica.host(): Ica,
ImWorthy.host(): ImWorthy,
IG.host(): IG,
IndianHealthyRecipes.host(): IndianHealthyRecipes,
Innit.host(): Innit,
Inspiralized.host(): Inspiralized,
JamieOliver.host(): JamieOliver,
JimCooksFoodGood.host(): JimCooksFoodGood,
Joyfoodsunshine.host(): Joyfoodsunshine,
JustATaste.host(): JustATaste,
JustBento.host(): JustBento,
JustOneCookbook.host(): JustOneCookbook,
KennyMcGovern.host(): KennyMcGovern,
KingArthur.host(): KingArthur,
KitchenStories.host(): KitchenStories,
Kochbar.host(): Kochbar,
Koket.host(): Koket,
KptnCook.host(): KptnCook,
KptnCook.host(subdomain="sharing"): KptnCook,
KuchniaDomowa.host(): KuchniaDomowa,
KwestiaSmaku.host(): KwestiaSmaku,
LAtelierDeRoxane.host(): LAtelierDeRoxane,
LeCremeDeLaCrumb.host(): LeCremeDeLaCrumb,
LeanAndGreenRecipes.host(): LeanAndGreenRecipes,
Lecker.host(): Lecker,
LekkerEnSimpel.host(): LekkerEnSimpel,
LittleSpiceJar.host(): LittleSpiceJar,
LivelyTable.host(): LivelyTable,
Lovingitvegan.host(): Lovingitvegan,
Maangchi.host(): Maangchi,
MadensVerden.host(): MadensVerden,
MadeWithLau.host(): MadeWithLau,
MarleySpoon.host(): MarleySpoon,
MarleySpoon.host(domain="de"): MarleySpoon,
MarleySpoon.host(domain="com.au"): MarleySpoon,
MarleySpoon.host(domain="be"): MarleySpoon,
MarleySpoon.host(domain="nl"): MarleySpoon,
MarleySpoon.host(domain="at"): MarleySpoon,
MarleySpoon.host(domain="se"): MarleySpoon,
Marmiton.host(): Marmiton,
MarthaStewart.host(): MarthaStewart,
Matprat.host(): Matprat,
Meljoulwan.host(): Meljoulwan,
MelsKitchenCafe.host(): MelsKitchenCafe,
Mindmegette.host(): Mindmegette,
Minimalistbaker.host(): Minimalistbaker,
Misya.host(): Misya,
MobKitchen.host(domain="mob.co.uk"): MobKitchen,
MobKitchen.host(domain="mobkitchen.co.uk"): MobKitchen,
MomsWithCrockPots.host(): MomsWithCrockPots,
MonsieurCuisine.host(): MonsieurCuisine,
MotherThyme.host(): MotherThyme,
MyBakingAddiction.host(): MyBakingAddiction,
MyKitchen101.host(): MyKitchen101,
MyKitchen101en.host(): MyKitchen101en,
MyRecipes.host(): MyRecipes,
NHSHealthierFamilies.host(): NHSHealthierFamilies,
NIHHealthyEating.host(): NIHHealthyEating,
NYTimes.host(): NYTimes,
NourishedByNutrition.host(): NourishedByNutrition,
NutritionByNathalie.host(): NutritionByNathalie,
OhSheGlows.host(): OhSheGlows,
OmnivoresCookbook.host(): OmnivoresCookbook,
OneHundredOneCookBooks.host(): OneHundredOneCookBooks,
OwenHan.host(): OwenHan,
PaleoRunningMomma.host(): PaleoRunningMomma,
Panelinha.host(): Panelinha,
PaniniHappy.host(): PaniniHappy,
PingoDoce.host(): PingoDoce,
PopSugar.host(): PopSugar,
PracticalSelfReliance.host(): PracticalSelfReliance,
PracticalSelfReliance.host(domain="creativecanning.com"): PracticalSelfReliance,
PrimalEdgeHealth.host(): PrimalEdgeHealth,
Przepisy.host(): Przepisy,
PurelyPope.host(): PurelyPope,
PurpleCarrot.host(): PurpleCarrot,
RachlMansfield.host(): RachlMansfield,
RainbowPlantLife.host(): RainbowPlantLife,
RealFoodTesco.host(): RealFoodTesco,
RealSimple.host(): RealSimple,
RealFoodTesco.host(): RealFoodTesco,
RecipeTinEats.host(): RecipeTinEats,
RedHouseSpice.host(): RedHouseSpice,
Reishunger.host(): Reishunger,
Rezeptwelt.host(): Rezeptwelt,
RosannaPansino.host(): RosannaPansino,
SallysBakingAddiction.host(): SallysBakingAddiction,
Saveur.host(): Saveur,
SeriousEats.host(): SeriousEats,
SimpleVeganista.host(): SimpleVeganista,
SimplyCookit.host(): SimplyCookit,
SimplyQuinoa.host(): SimplyQuinoa,
SimplyRecipes.host(): SimplyRecipes,
SimplyWhisked.host(): SimplyWhisked,
SkinnyTaste.host(): SkinnyTaste,
Smulweb.host(): Smulweb,
SouthernCastIron.host(): SouthernCastIron,
SouthernLiving.host(): SouthernLiving,
SpendWithPennies.host(): SpendWithPennies,
Springlane.host(): Springlane,
SteamyKitchen.host(): SteamyKitchen,
StreetKitchen.host(): StreetKitchen,
SunBasket.host(): SunBasket,
SundPaaBudget.host(): SundPaaBudget,
Sunset.host(): Sunset,
SweetCsDesigns.host(): SweetCsDesigns,
SweetPeasAndSaffron.host(): SweetPeasAndSaffron,
TasteOfHome.host(): TasteOfHome,
TastesBetterFromScratch.host(): TastesBetterFromScratch,
TastesOfLizzyT.host(): TastesOfLizzyT,
Tasty.host(): Tasty,
TastyKitchen.host(): TastyKitchen,
TheCleverCarrot.host(): TheCleverCarrot,
TheHappyFoodie.host(): TheHappyFoodie,
TheKitchenMagPie.host(): TheKitchenMagPie,
TheKitchn.host(): TheKitchn,
TheNutritiousKitchen.host(): TheNutritiousKitchen,
ThePioneerWoman.host(): ThePioneerWoman,
TheSpruceEats.host(): TheSpruceEats,
TheVintageMixer.host(): TheVintageMixer,
Thewoksoflife.host(): Thewoksoflife,
TimesOfIndia.host(): TimesOfIndia,
TineNo.host(): TineNo,
TudoGostoso.host(): TudoGostoso,
TwoPeasAndTheirPod.host(): TwoPeasAndTheirPod,
USDAMyPlate.host(): USDAMyPlate,
Valdemarsro.host(): Valdemarsro,
VanillaAndBean.host(): VanillaAndBean,
VegRecipesOfIndia.host(): VegRecipesOfIndia,
Vegolosi.host(): Vegolosi,
WatchWhatUEat.host(): WatchWhatUEat,
WhatsGabyCooking.host(): WhatsGabyCooking,
WholeFoods.host(): WholeFoods,
WholeFoods.host(domain="co.uk"): WholeFoods,
Woop.host(): Woop,
WikiCookbook.host(): WikiCookbook,
Woolworths.host(): Woolworths,
Yemek.host(): Yemek,
Yummly.host(): Yummly,
ZeitWochenmarkt.host(): ZeitWochenmarkt,
ZenBelly.host(): ZenBelly,
}
def scrape_me(url_path: str, **options: dict[str, Any]) -> AbstractScraper:
host_name = get_host_name(url_path)
try:
scraper = SCRAPERS[host_name]
except KeyError:
if not options.get("wild_mode", False):
raise WebsiteNotImplementedError(host_name)
else:
options.pop("wild_mode")
wild_scraper = SchemaScraperFactory.generate(url_path, **options)
if not wild_scraper.schema.data:
raise NoSchemaFoundInWildMode(url_path)
return wild_scraper
return scraper(url_path, **options)
def scrape_html(
html: str, org_url: Optional[str] = None, **options: dict[str, Any]
) -> AbstractScraper:
"""
takes a string of html and returns a scraper object. if the org_url is specified
then the scraper will use that url to resolve a defined scraper, otherwise it will
fall back to wild mode. If no schema is found in wild mode then a
NoSchemaFoundInWildMode exception will be raised.
Args:
html (str): raw HTML in text form
org_url (Optional[str], optional): Original URL of the HTML. Defaults to None.
Raises:
NoSchemaFoundInWildMode: If no schema is found in wild mode.
Returns:
AbstractScraper:
"""
host_name = get_host_name(org_url) if org_url is not None else None
scraper = None
if host_name:
with contextlib.suppress(KeyError):
scraper = SCRAPERS[host_name]
if not scraper:
wild_scraper = SchemaScraperFactory.generate(url=org_url, html=html, **options)
if not wild_scraper.schema.data:
raise NoSchemaFoundInWildMode(org_url)
return wild_scraper
return scraper(url=org_url, html=html, **options)
__all__ = ["scrape_me", "scrape_html"]
name = "recipe_scrapers"