• Не могу понять в чем проблема, сохраняет только последние полученные данные, в чем дело?

    Вы создали 3 цикла, в которых перезаписываете значение переменной до добавления в лист, именно поэтому у вас сохраняется последнее значение.
    Также вместо создания трех циклов можно обойтись одним. (Вывод сделан на основании одинаковых селекторов переменных cards_hrefs, titles, prices).

    Изначальный ответ
    for items in data:    
        cards = data.find_all("div", class_="card-body")
        for card in cards:
            catalog.append({
                "link to the product": "https://scrapingclub.com" + card.find("a").get("href"),
                "title": card.find("h4").text.strip(),
                "price": card.find("h5").text.strip()
            })

    С верным замечанием от AUser0
    Обновленный ответ
    data = soup.find("div", class_="row my-4")
    
    catalog = []
    cards = data.find_all("div", class_="card-body")
    for card in cards:
        catalog.append({
            "link to the product": "https://scrapingclub.com" + card.find("a").get("href"),
            "title": card.find("h4").text.strip(),
            "price": card.find("h5").text.strip()
        })
    Ответ написан
    2 комментария