как правильно написать сохранение в json формат

мне нужно чтоб все спарсенные заголовки сохранялись в список и json файл, но я не знаю как правильно это делать. Вот сам код :

from bs4 import BeautifulSoup as bs
import requests

name_image = []
page = 0

while page <= 5:
    url = 'https://ananasposter.ru/catalogue' + '?page=' + str(page) 
    req = requests.get(url)
    soup = bs(req.text, 'lxml')

    name = soup.find_all('h3', class_='name-product padding-product-meta')

    page += 1

Ответы (2 шт):

Автор решения: quswadress

Для записи в файл вам необходимо использовать встроенную функцию open, а для кодировки в json использовать функцию dump или dumps из встроенного модуля json.

import json

from bs4 import BeautifulSoup as bs
import requests

page = 0

while page <= 5:
    url = 'https://ananasposter.ru/catalogue' + '?page=' + str(page)
    req = requests.get(url)
    soup = bs(req.text, 'lxml')

    names = soup.find_all('h3', class_='name-product padding-product-meta')

    text_names = [name.text for name in names]  # Список с текстом заголовков
    with open(f'file{page}.json', 'w',) as file:   # Открываем json файл
        json.dump(text_names, file)  # И записываем туда список в формате json

    page += 1
→ Ссылка
Автор решения: Exllent
from time import sleep
from bs4 import BeautifulSoup as bs
import requests, json, random

name_image = []
page = 0
url = 'https://ananasposter.ru/catalogue'
all_categories = {}
for page in range(1304):
    url = 'https://ananasposter.ru/catalogue' + '?page=' + str(page)
    req = requests.get(url)
    soup = bs(req.text, 'lxml')
    name = soup.find_all('h3', class_='name-product padding-product-meta')
    for item in name:
        text = item.text  # Достаём название
        link = item.find_next().get("href")  # Достаём ссылку
        all_categories[text] = link  # Добовляем в словарь ключ = Название, значение = ссылка
        with open("your.json", 'w') as file:
            json.dump(all_categories, file, indent=4, ensure_ascii=False)  # 1 именованный аргумент делает отступы
            name_image.append((text, link))  # 2 именованный аргумент не меняет кодировку и не экранирует символы 

    print(f"Осталось итераций: {page} из 1303")
    sleep(random.randint(2, 4))
    page += 1
    print(name_image)

Я думаю всё понятно не знаю нужно было или нет ещё ссылки парсить, ну я написал, в список тоже записывает. Следует обернуть в try, except но для маленького примера не стал этого делать, Результат на фотовведите сюда описание изображения

→ Ссылка