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

HTML:

<div class="post-header__body oflow-x-hidden post-header__body--recipe" role="banner" style="outline: rgb(74, 144, 226) solid 3px; outline-offset: 2px;">
<div class="headline post-header__title post-header__title--masthead-layout"><h1 class="heading-1">Easy vegetarian chilli</h1></div>
<div class="post-header__body__author">
<div class="author-link d-inline pa-reset author-link__list" data-feature="Author"><ul class="d-inline pa-reset list-style-none"><li class="d-inline"><a class="link link--styled" data-component="Link" href="/author/samuelgoldsmith" rel="author">Samuel Goldsmith</a></li></ul></div></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" data-component="Button" data-component-variant="save" data-gtm-class="save-button" role="button" type="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 aria-hidden="true" class="icon__svg" 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 aria-label="Manage Collections" class="button split-button__button split-button__sub-button button--no-min-width button--no-padding button--secondary" data-component="Button" data-component-variant="add-to-collection-button" data-gtm-class="add-to-collection-button" role="button" tabindex="-1" type="button">
<div class="button__content"><i class="icon" style="width:20px;min-width:20px;height:20px;min-height:20px;animation-duration:1000ms"><svg aria-hidden="true" class="icon__svg" 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 8</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:<!-- --> <strong><span><time datetime="PT0H25M">25 mins</time></span></strong></div>
<div class="recipe-cook-and-prep-details__item">Cook:<!-- --> <strong><span><time datetime="PT0H55M">55 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 class="rating__skiplinks" data-feature="Reactions" data-placement="Reactions Quick Links"><a class="link d-flex" data-component="Link" href="#rating">
<div class="rating rating--inline">
<div aria-label="rating" class="rating__values">
<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 aria-hidden="true" class="icon__svg" 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 aria-hidden="true" class="icon__svg" 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 aria-hidden="true" class="icon__svg" 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 aria-hidden="true" class="icon__svg" 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 aria-hidden="true" class="icon__svg" 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.6 out of 5.</span><span class="rating__count-text body-copy-small">82 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/easy-vegetarian-chilli#Recipe","aggregateRating":{"@type":"AggregateRating","ratingValue":5,"reviewCount":82,"bestRating":5,"worstRating":1}}</script><a class="link d-inline-flex link--styled" data-component="Link" href="#commentsFeed">33 comments</a></div></div></div>
<div>
<div class="line-clamper recipe-masthead__description" id="recipe-masthead-description">
<div class="region-clamper line-clamper__content" id="recipe-masthead-description-region" style="line-clamp:3;-webkit-line-clamp:3">
<div class="editor-content"><p>Rustle up our easy veggie chilli. It's a great recipe for batch-cooking – you can easily double it if you have a pan big enough, and freeze the rest</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">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" data-component="Button" data-component-variant="print-button" data-feature="print" data-gtm-class="print-button" role="button" type="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 aria-hidden="true" class="icon__svg" 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" 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" target="_blank"><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__content" style="outline: rgb(74, 144, 226) solid 3px; outline-offset: 2px;">
<div class=""><section class="ingredients-list" data-component="IngredientsList" data-feature="Recipe Instructions" data-gtm-vis-first-on-screen39254740_288="146618" data-gtm-vis-has-fired39254740_288="1" data-gtm-vis-recent-on-screen39254740_288="146618" data-gtm-vis-total-visible-time39254740_288="100" data-stitcher-dai-container="ingredients-list" id="ingredients-list"><section><ul class="ingredients-list list"><li class="ingredients-list__item list-item" style="outline-offset: 2px;"><span class="ingredients-list__item-quantity">2 tbsp </span><span class="ingredients-list__item-ingredient">vegetable oil</span></li><li class="ingredients-list__item list-item list-item--separator-top" style="outline-offset: 2px;"><span class="ingredients-list__item-quantity">2 </span><a class="link link--styled" data-component="Link" href="/glossary/carrots-glossary"><span class="ingredients-list__item-ingredient">carrots</span></a>
<div class="ingredients-list__item-note" style="outline-offset: 2px;"> finely chopped</div></li><li class="ingredients-list__item list-item list-item--separator-top" style="outline-offset: 2px;"><span class="ingredients-list__item-quantity">2 </span><a class="link link--styled" data-component="Link" href="/glossary/celery-glossary"><span class="ingredients-list__item-ingredient">celery sticks</span></a>
<div class="ingredients-list__item-note" style="outline-offset: 2px;"> finely chopped</div></li><li class="ingredients-list__item list-item list-item--separator-top" style="outline-offset: 2px;"><span class="ingredients-list__item-quantity">2 </span><a class="link link--styled" data-component="Link" href="/glossary/onion-glossary"><span class="ingredients-list__item-ingredient">onions</span></a>
<div class="ingredients-list__item-note"> finely chopped</div></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">2 tsp </span><span class="ingredients-list__item-ingredient">dried mixed herbs</span></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">2 </span><a class="link link--styled" data-component="Link" href="/glossary/garlic-glossary"><span class="ingredients-list__item-ingredient">garlic cloves</span></a>
<div class="ingredients-list__item-note"> crushed or finely grated</div></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">1 </span><a class="link link--styled" data-component="Link" href="/glossary/pepper-glossary"><span class="ingredients-list__item-ingredient">red pepper</span></a>
<div class="ingredients-list__item-note"> sliced</div></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">1 </span><a class="link link--styled" data-component="Link" href="/glossary/pepper-glossary"><span class="ingredients-list__item-ingredient">green pepper</span></a>
<div class="ingredients-list__item-note"> sliced</div></li><li class="ingredients-list__item list-item list-item--separator-top"><a class="link link--styled" data-component="Link" href="/glossary/chilli-glossary"><span class="ingredients-list__item-ingredient">2-3 tsp chilli powder</span></a>
<div class="ingredients-list__item-note"> (depending on how hot you like it)</div></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">2 tsp </span><a class="link link--styled" data-component="Link" href="/glossary/paprika-glossary"><span class="ingredients-list__item-ingredient">sweet smoked paprika</span></a></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">2 tbsp </span><span class="ingredients-list__item-ingredient">tomato purée</span></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">400g </span><a class="link link--styled" data-component="Link" href="/glossary/kidney-beans-glossary"><span class="ingredients-list__item-ingredient">can red kidney beans, drained</span></a></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">400g </span><span class="ingredients-list__item-ingredient">can black beans, drained</span></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">2 x 400g </span><a class="link link--styled" data-component="Link" href="/glossary/tomato-glossary"><span class="ingredients-list__item-ingredient">cans chopped tomatoes</span></a></li><li class="ingredients-list__item list-item list-item--separator-top"><span class="ingredients-list__item-quantity">400ml </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-ingredient">cooked rice</span>
<div class="ingredients-list__item-note"> grated cheddar and soured cream, 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">
<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" data-component="Link" 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">Good Food app.</a></div></div></div></div></div></section></div>
<div class="d-none"><p class="recipe__nutritions-caption">Nutrition: Per serving</p><ul class="nutrition-list"><li class="nutrition-list__item"><span class="nutrition-list__label">kcal</span>157</li><li class="nutrition-list__item"><span class="nutrition-list__label">fat</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 aria-hidden="true" class="icon__svg" 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>0.3<!-- -->g</li><li class="nutrition-list__item"><span class="nutrition-list__label">carbs</span>19<!-- -->g</li><li class="nutrition-list__item"><span class="nutrition-list__label">sugars</span>10<!-- -->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 aria-hidden="true" class="icon__svg" 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>9<!-- -->g
<div class="nutrition-list__additional-text">high
<div class="nutrition-list__additional-text-icon"><i class="icon" style="width:12px;min-width:12px;height:12px;min-height:12px;animation-duration:1000ms"><svg aria-hidden="true" class="icon__svg" 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">protein</span>7<!-- -->g</li><li class="nutrition-list__item"><span class="nutrition-list__label">salt</span>0.25<!-- -->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 aria-hidden="true" class="icon__svg" 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>
<!-- FRAGMENT SEPARATOR -->
<section class="method-steps mb-lg" data-placement="MethodList" style="outline: rgb(74, 144, 226) solid 3px; outline-offset: 2px;"><h2 class="method-steps__heading heading-3" style="outline-offset: 2px;">Method</h2><ul class="method-steps__list"><li class="method-steps__list-item" style="outline-offset: 2px;"><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 low-medium heat and fry the carrots, celery, onions and mixed herbs for 10-12 mins, stirring occasionally until the veg is soft but not golden. You may need to add a splash of water if the veg starts to catch.</p>
<div class="ad-placement" data-count="255"></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>Stir in the garlic and both peppers, and cook for a further 5 mins until the peppers begin to soften. Sprinkle in the chilli powder and paprika, turn up the heat to medium, then stir and cook for 1 min. Mix in the tomato purée and cook for a further 1 min, then pour in all of the beans, the tomatoes and stock.</p>
<div class="ad-placement" data-count="572"></div></div></li><li class="method-steps__list-item"><h3 class="method-steps__item-heading heading-5">step 3</h3>
<div class="editor-content"><p>Stir well, bring to the boil, then reduce the heat to a simmer. Cook for 25-35 mins until the beans are tender and the sauce has thickened. Serve with rice, grated cheddar and soured cream, if you like.</p>
<div class="ad-placement" data-count="780"></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": "Easy vegetarian chilli",
  "description": "Rustle up our easy veggie chilli. It's a great recipe for batch-cooking – you can easily double it if you have a pan big enough, and freeze the rest",
  "author": "Samuel Goldsmith",
  "prep_time": "25 mins",
  "cook_time": "55 mins",
  "total_time": "80 mins",
  "servings": "8",
  "ingredients": [
    "2 tbsp vegetable oil",
    "2 carrots finely chopped",
    "2 celery sticks finely chopped",
    "2 onions finely chopped",
    "2 tsp dried mixed herbs",
    "2 garlic cloves crushed or finely grated",
    "1 red pepper sliced",
    "1 green pepper sliced",
    "2-3 tsp chilli powder (depending on how hot you like it)",
    "2 tsp sweet smoked paprika",
    "2 tbsp tomato purée",
    "400g can red kidney beans, drained",
    "400g can black beans, drained",
    "2 x 400g cans chopped tomatoes",
    "400ml vegetable stock"
  ],
  "instructions": [
    "step 1Heat the oil in a large saucepan over a low-medium heat and fry the carrots, celery, onions and mixed herbs for 10-12 mins, stirring occasionally until the veg is soft but not golden. You may need to add a splash of water if the veg starts to catch.",
    "step 2Stir in the garlic and both peppers, and cook for a further 5 mins until the peppers begin to soften. Sprinkle in the chilli powder and paprika, turn up the heat to medium, then stir and cook for 1 min. Mix in the tomato purée and cook for a further 1 min, then pour in all of the beans, the tomatoes and stock.",
    "step 3Stir well, bring to the boil, then reduce the heat to a simmer. Cook for 25-35 mins until the beans are tender and the sauce has thickened. Serve with rice, grated cheddar and soured cream, if you like."
  ],
  "image_url": "https://media.immediate.co.uk/volatile/sites/30/2025/03/arrowoutward27dpBE2A77FILL0wght400GRAD0opsz24-d1f0d96.svg"
}
assistant