import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" allowed_domains = ["quotes.toscrape.com"] async def start(self): tag = getattr(self, "tag", None) max_quotes = int(getattr(self, "max_quotes", "3")) url = "https://quotes.toscrape.com/" if tag: url = f"{url}tag/{tag}/" yield scrapy.Request( url, meta={"tag": tag or "all", "max_quotes": max_quotes}, callback=self.parse, ) def parse(self, response): tag = response.meta["tag"] max_quotes = response.meta["max_quotes"] for quote in response.css("div.quote")[:max_quotes]: yield { "tag": tag, "author": quote.css("small.author::text").get(default="").strip(), "url": response.url, }