Extract structured data from the following HTML and return it as JSON.

HTML:
<div class="post-header__body oflow-x-hidden ml-reset post-header__body--recipe" role="banner" style="outline: rgb(74, 144, 226) solid 3px; outline-offset: 2px;"><div class="post-header__sponsor-image hidden-print post-header__sponsor-image--masthead-layout"><a class="link" href="https://www.freestyle.abbott/uk-en/getting-started/sampling.html" rel="nofollow" target="_blank" data-component="Link"><div class="image chromatic-ignore image--fluid" style="max-width: 120.837px;"><div class="image__container"><picture class="image__picture" width="180" height="80.43898156277437"><source type="image/webp" sizes="(min-width: 768px) 180px,80px" srcset="https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;webp=true&amp;resize=80,36 80w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;webp=true&amp;resize=160,72 160w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;webp=true&amp;resize=180,80 180w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;webp=true&amp;resize=240,107 240w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;webp=true&amp;resize=320,143 320w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;webp=true&amp;resize=360,161 360w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;webp=true&amp;resize=540,241 540w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;webp=true&amp;resize=720,322 720w"><source sizes="(min-width: 768px) 180px,80px" srcset="https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=80,36 80w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=160,72 160w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=180,80 180w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=240,107 240w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=320,143 320w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=360,161 360w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=540,241 540w,https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=720,322 720w"><img class="image__img" src="https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&amp;resize=180,80" alt="FreeStyle Libre logo" data-item-name="FreeStyle Libre logo" title="Logo_L_YCH_RGB" loading="lazy" width="180" height="80.43898156277437" style="aspect-ratio: 1 / 0.446883; object-fit: cover;"></picture></div></div></a></div><div class="post-header__row post-header__row--center-aligned hidden-print"><div class="link-box body-copy-small" style="background-color:rgba(70, 124, 160, 1);color:rgba(255, 255, 255, 1)"><div class="pl-xxs pr-xxs">Sponsored by <a class="link link-box__link" href="https://www.freestyle.abbott/uk-en/getting-started/sampling.html" rel="nofollow" data-component="Link">FreeStyle Libre</a></div></div></div><div class="headline post-header__title post-header__title--masthead-layout"><h1 class="heading-1">Celery soup</h1></div><div class="pocket hidden-print mb-sm" data-placement="recipeActions"><div class="split-button" data-feature="save"><button class="button split-button__button split-button__main-button button--no-min-width" type="button" data-component="Button" data-component-variant="save" data-gtm-class="save-button" role="button"><div class="button__content"><div class="split-button__main-button-content d-flex justify-content-space-between align-items-center full-width"><i class="icon" style="width:14px;min-width:14px;height:14px;min-height:14px;animation-duration:1000ms"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:inherit;fill:inherit"><use xlink:href="/static/icons/base/sprite-maps/core-1a005f7320611e9f728ab33e1967ce65.svg#plus"></use></svg></i><div class="pl-xs">Save recipe</div></div></div></button><button class="button split-button__button split-button__sub-button button--no-min-width button--no-padding button--secondary" aria-label="Manage Collections" type="button" tabindex="-1" data-component="Button" data-component-variant="add-to-collection-button" data-gtm-class="add-to-collection-button" role="button"><div class="button__content"><i class="icon" style="width:20px;min-width:20px;height:20px;min-height:20px;animation-duration:1000ms"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:inherit;fill:inherit"><use xlink:href="/static/icons/base/sprite-maps/core-1a005f7320611e9f728ab33e1967ce65.svg#dot-menu"></use></svg></i></div></button></div></div><div class="recipe-cook-and-prep-details"><div class="recipe-cook-and-prep-details__section"><div class="recipe-cook-and-prep-details__item"><strong>Serves 3 - 4</strong></div><div class="recipe-cook-and-prep-details__item"><strong>Easy</strong></div></div><div class="recipe-cook-and-prep-details__section"><div class="recipe-cook-and-prep-details__item">Prep:<!-- -->&nbsp;<strong><span><time datetime="PT0H15M">15 mins</time></span></strong></div><div class="recipe-cook-and-prep-details__item">Cook:<!-- -->&nbsp;<strong><span><time datetime="PT0H40M">40 mins</time></span></strong></div></div></div><div class="pocket hidden-print post-header__row--center-aligned body-copy-small pocket--horizontal" data-placement="recipeMeta"><div class="mt-sm d-flex"><div data-feature="Reactions" data-placement="Reactions Quick Links" class="rating__skiplinks"><a class="link d-flex" href="#rating" data-component="Link"><div class="rating rating--inline"><div class="rating__values" aria-label="rating"><div class="rating__stars d-flex"><i class="rating__icon d-inline-flex icon" style="width: 15px; min-width: 15px; height: 15px; min-height: 15px; animation-duration: 1000ms;"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color: rgb(244, 191, 31); fill: rgb(244, 191, 31);"><use xlink:href="/static/icons/base/sprite-maps/stars-1a005f7320611e9f728ab33e1967ce65.svg#star-fill"></use></svg></i><i class="rating__icon d-inline-flex icon" style="width: 15px; min-width: 15px; height: 15px; min-height: 15px; animation-duration: 1000ms;"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color: rgb(244, 191, 31); fill: rgb(244, 191, 31);"><use xlink:href="/static/icons/base/sprite-maps/stars-1a005f7320611e9f728ab33e1967ce65.svg#star-fill"></use></svg></i><i class="rating__icon d-inline-flex icon" style="width: 15px; min-width: 15px; height: 15px; min-height: 15px; animation-duration: 1000ms;"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color: rgb(244, 191, 31); fill: rgb(244, 191, 31);"><use xlink:href="/static/icons/base/sprite-maps/stars-1a005f7320611e9f728ab33e1967ce65.svg#star-fill"></use></svg></i><i class="rating__icon d-inline-flex icon" style="width: 15px; min-width: 15px; height: 15px; min-height: 15px; animation-duration: 1000ms;"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color: rgb(244, 191, 31); fill: rgb(244, 191, 31);"><use xlink:href="/static/icons/base/sprite-maps/stars-1a005f7320611e9f728ab33e1967ce65.svg#star-fill"></use></svg></i><i class="rating__icon d-inline-flex icon" style="width: 15px; min-width: 15px; height: 15px; min-height: 15px; animation-duration: 1000ms;"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color: rgb(244, 191, 31); fill: rgb(244, 191, 31);"><use xlink:href="/static/icons/base/sprite-maps/stars-1a005f7320611e9f728ab33e1967ce65.svg#star-fill"></use></svg></i></div><span class="sr-only">A star rating of 4.7 out of 5.</span><span class="rating__count-text body-copy-small">383 ratings</span><span class="rating__rate-link ml-xs body-copy-small">Rate</span></div></div></a><script type="application/ld+json">{"@context":"https://schema.org/","@id":"https://www.bbcgoodfood.com/recipes/celery-soup#Recipe","aggregateRating":{"@type":"AggregateRating","ratingValue":5,"reviewCount":383,"bestRating":5,"worstRating":1}}</script><a class="link d-inline-flex link--styled" href="#commentsFeed" data-component="Link">167 comments</a></div></div></div><div><div id="recipe-masthead-description" class="line-clamper recipe-masthead__description"><div id="recipe-masthead-description-region" class="region-clamper line-clamper__content" style="line-clamp:3;-webkit-line-clamp:3"><div class="editor-content"><p>Cook up a batch of fresh, low-calorie celery soup for a healthy and filling veggie lunch or supper. Serve with chunks of crusty bread</p></div></div></div></div><div class="post-header--masthead__tags"><div class="post-header--masthead__tags-item">Easily doubled</div><div class="post-header--masthead__tags-item">Freezable</div><div class="post-header--masthead__tags-item">Egg-free</div><div class="post-header--masthead__tags-item">Healthy</div><div class="post-header--masthead__tags-item">Low calorie</div><div class="post-header--masthead__tags-item">Low fat</div><div class="post-header--masthead__tags-item">Nut-free</div><div class="post-header--masthead__tags-item">Vegetarian</div></div><div class="ab_container"><button class="button hidden-for-sm-down button--icon button--no-min-width button--secondary" type="button" data-component="Button" data-component-variant="print-button" data-feature="print" data-gtm-class="print-button" role="button"><div class="button__content"><i class="mr-xs icon" style="width:20px;min-width:20px;height:20px;min-height:20px;animation-duration:nullms"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:inherit;fill:inherit"><use xlink:href="/static/icons/base/sprite-maps/core-1a005f7320611e9f728ab33e1967ce65.svg#print"></use></svg></i>Print</div></button><a class="ab_download_button" target="_blank" href="https://immediate.onelink.me/OQap?af_xp=custom&amp;pid=website&amp;c=guide_link_may25_variant2&amp;is_retargeting=true&amp;af_reengagement_window=30d&amp;af_dp=bbcgoodfood%3A%2F%2F"><img class="ab_pinktick" src="https://media.immediate.co.uk/volatile/sites/30/2025/03/arrowoutward27dpBE2A77FILL0wght400GRAD0opsz24-d1f0d96.svg"><img class="ab_hide ab_whitetick" src="https://media.immediate.co.uk/volatile/sites/30/2025/02/arrowoutward24dp5F6368FILL0wght400GRAD0opsz24-1-8008a4f.svg">Try our app</a><p></p></div><div class="hidden-for-md-up post-header--masthead__piano-button-wrapper masthead-piano-promo-button"></div></div>

<!-- FRAGMENT SEPARATOR -->

<div class="tabbed-list recipe__ingredients-nutrition" data-component="TabbedList" style="outline: rgb(74, 144, 226) solid 3px; outline-offset: 2px;"><div class="tabbed-list__header"><h2 class="tabbed-list__tab heading-3"><button type="button" class="tabbed-list__tab-button tabbed-list__tab-button--active" data-feature="TabbedListButton" data-feature-variant="Left" data-index="1" data-gtm-vis-recent-on-screen39254740_288="100456" data-gtm-vis-first-on-screen39254740_288="100456" data-gtm-vis-total-visible-time39254740_288="100" data-gtm-vis-has-fired39254740_288="1">Ingredients</button></h2><h2 class="tabbed-list__tab heading-3"><button type="button" class="tabbed-list__tab-button" data-feature="TabbedListButton" data-feature-variant="Right" data-index="2" data-gtm-vis-recent-on-screen39254740_288="100472" data-gtm-vis-first-on-screen39254740_288="100472" data-gtm-vis-total-visible-time39254740_288="100" data-gtm-vis-has-fired39254740_288="1">Nutrition</button></h2></div><div class="tabbed-list__content"><div class=""><section id="ingredients-list" class="ingredients-list" data-component="IngredientsList" data-feature="Recipe Instructions" data-stitcher-dai-container="ingredients-list" data-gtm-vis-recent-on-screen39254740_288="100505" data-gtm-vis-first-on-screen39254740_288="100505" data-gtm-vis-total-visible-time39254740_288="100" data-gtm-vis-has-fired39254740_288="1"><section><ul class="ingredients-list list"><li class="ingredients-list__item list-item"><span class="ingredients-list__item-quantity">2 tbsp </span><a class="link link--styled" href="/glossary/olive-oil-glossary" data-component="Link"><span class="ingredients-list__item-ingredient">olive oil</span></a></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">300g </span><a class="link link--styled" href="/glossary/celery-glossary" data-component="Link"><span class="ingredients-list__item-ingredient">celery</span></a><div class="ingredients-list__item-note"> sliced, with tough strings removed</div></li><li class="ingredients-list__item list-item list-item--separator-top" style="outline-offset: 2px;"><span class="ingredients-list__item-quantity">1 </span><a class="link link--styled" href="/glossary/garlic-glossary" data-component="Link"><span class="ingredients-list__item-ingredient">garlic clove</span></a><div class="ingredients-list__item-note" style="outline-offset: 2px;"> peeled</div></li><li class="ingredients-list__item list-item list-item--separator-top" style="outline-offset: 2px;"><span class="ingredients-list__item-quantity">200g </span><a class="link link--styled" href="/glossary/potato-glossary" data-component="Link"><span class="ingredients-list__item-ingredient">potatoes</span></a><div class="ingredients-list__item-note" style="outline-offset: 2px;"> peeled and cut into chunks</div></li><li class="ingredients-list__item list-item list-item--separator-top" style="outline-offset: 2px;"><span class="ingredients-list__item-quantity">500ml </span><span class="ingredients-list__item-ingredient">vegetable stock</span></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">100ml </span><a class="link link--styled" href="/glossary/milk-glossary" data-component="Link"><span class="ingredients-list__item-ingredient">milk</span></a></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-ingredient">crusty bread</span><div class="ingredients-list__item-note"> to serve</div></li></ul></section><div class="pocket hidden-print ingredients-list__heading list-item--separator-top mt-xs pt-xs pocket--horizontal" data-placement="recipeBelowIngredients"><div class="d-flex"><div data-feature="promotionalWidget" data-feature-variant="promoLink" data-gtm-vis-recent-on-screen39254740_288="101071" data-gtm-vis-first-on-screen39254740_288="101071" data-gtm-vis-total-visible-time39254740_288="100" data-gtm-vis-has-fired39254740_288="1"><div class="line-clamper"><div class="region-clamper line-clamper__content" style="line-clamp:3;-webkit-line-clamp:3">Keep the screen awake with cook mode on the<!-- --> <a class="link link--styled" href="https://immediate.onelink.me/OQap?af_xp=custom&amp;pid=website&amp;c=ingredients_CTA&amp;is_retargeting=true&amp;af_reengagement_window=30d&amp;af_dp=bbcgoodfood%3A%2F%2F" data-component="Link">Good Food app.</a></div></div></div></div></div></section></div><div class="d-none"><p class="recipe__nutritions-caption">Nutrition: per serving (3)</p><ul class="nutrition-list"><li class="nutrition-list__item"><span class="nutrition-list__label">kcal</span>163<div class="nutrition-list__additional-text">low<div class="nutrition-list__additional-text-icon"><i class="icon" style="width:12px;min-width:12px;height:12px;min-height:12px;animation-duration:1000ms;transform:rotate(180deg)"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:rgba(255, 255, 255, 1);fill:rgba(255, 255, 255, 1)"><use xlink:href="/static/icons/base/sprite-maps/arrows-1a005f7320611e9f728ab33e1967ce65.svg#arrow-light"></use></svg></i></div></div></li><li class="nutrition-list__item"><span class="nutrition-list__label">fat</span>9<!-- -->g<div class="nutrition-list__additional-text">low<div class="nutrition-list__additional-text-icon"><i class="icon" style="width:12px;min-width:12px;height:12px;min-height:12px;animation-duration:1000ms;transform:rotate(180deg)"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:rgba(255, 255, 255, 1);fill:rgba(255, 255, 255, 1)"><use xlink:href="/static/icons/base/sprite-maps/arrows-1a005f7320611e9f728ab33e1967ce65.svg#arrow-light"></use></svg></i></div></div></li><li class="nutrition-list__item"><span class="nutrition-list__label">saturates</span>2<!-- -->g</li><li class="nutrition-list__item"><span class="nutrition-list__label">carbs</span>15<!-- -->g</li><li class="nutrition-list__item"><span class="nutrition-list__label">sugars</span>4<!-- -->g<div class="nutrition-list__additional-text">low<div class="nutrition-list__additional-text-icon"><i class="icon" style="width:12px;min-width:12px;height:12px;min-height:12px;animation-duration:1000ms;transform:rotate(180deg)"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:rgba(255, 255, 255, 1);fill:rgba(255, 255, 255, 1)"><use xlink:href="/static/icons/base/sprite-maps/arrows-1a005f7320611e9f728ab33e1967ce65.svg#arrow-light"></use></svg></i></div></div></li><li class="nutrition-list__item"><span class="nutrition-list__label">fibre</span>3<!-- -->g</li><li class="nutrition-list__item"><span class="nutrition-list__label">protein</span>3<!-- -->g</li><li class="nutrition-list__item"><span class="nutrition-list__label">salt</span>0.6<!-- -->g<div class="nutrition-list__additional-text">low<div class="nutrition-list__additional-text-icon"><i class="icon" style="width:12px;min-width:12px;height:12px;min-height:12px;animation-duration:1000ms;transform:rotate(180deg)"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:rgba(255, 255, 255, 1);fill:rgba(255, 255, 255, 1)"><use xlink:href="/static/icons/base/sprite-maps/arrows-1a005f7320611e9f728ab33e1967ce65.svg#arrow-light"></use></svg></i></div></div></li></ul></div></div></div>

<!-- FRAGMENT SEPARATOR -->

<section class="method-steps mb-lg" data-placement="MethodList" style="outline-offset: 2px; outline: rgb(74, 144, 226) solid 3px;"><h2 class="method-steps__heading heading-3">Method</h2><ul class="method-steps__list"><li class="method-steps__list-item"><h3 class="method-steps__item-heading heading-5" style="outline-offset: 2px;">step 1</h3><div class="editor-content"><p style="outline-offset: 2px;">Heat the oil in a large saucepan over a medium heat, tip in the celery, garlic and potatoes and coat in the oil. Add a splash of water and a big pinch of salt and cook, stirring regularly for 15 mins, adding a little more water if the veg begins to stick.</p><div class="ad-placement" data-count="261"></div></div></li><li class="method-steps__list-item"><h3 class="method-steps__item-heading heading-5">step 2</h3><div class="editor-content"><p>Pour in the vegetable stock and bring to the boil, then turn the heat down and simmer for 20 mins further, until the potatoes are falling apart and the celery is soft. Use a stick blender to purée the soup, then pour in the milk and blitz again. Season to taste. Serve with crusty bread.</p><div class="ad-placement" data-count="554"></div></div></li></ul></section>

Return a JSON object with these fields: type, name, description, author, prep_time, cook_time, total_time, servings, ingredients (array), instructions (array)
user
{
  "type": "recipe",
  "name": "Celery soup",
  "description": "Cook up a batch of fresh, low-calorie celery soup for a healthy and filling veggie lunch or supper. Serve with chunks of crusty bread",
  "author": "Libre",
  "prep_time": "15 mins",
  "cook_time": "40 mins",
  "total_time": "55 mins",
  "servings": "3-4",
  "ingredients": [
    "2 tbsp olive oil",
    "300g celery sliced, with tough strings removed",
    "1 garlic clove peeled",
    "200g potatoes peeled and cut into chunks",
    "500ml vegetable stock",
    "100ml milk",
    "crusty bread to serve"
  ],
  "instructions": [
    "step 1Heat the oil in a large saucepan over a medium heat, tip in the celery, garlic and potatoes and coat in the oil. Add a splash of water and a big pinch of salt and cook, stirring regularly for 15 mins, adding a little more water if the veg begins to stick.",
    "step 2Pour in the vegetable stock and bring to the boil, then turn the heat down and simmer for 20 mins further, until the potatoes are falling apart and the celery is soft. Use a stick blender to purée the soup, then pour in the milk and blitz again. Season to taste. Serve with crusty bread."
  ],
  "image_url": "https://images.immediate.co.uk/production/volatile/sites/30/2025/08/LogoLYCHRGB-58260af.png?quality=90&resize=180,80"
}
assistant