Привет! Ты спарсил кучу данных, и теперь возникает вопрос: куда это всё сохранить? В этой статье разберём все популярные форматы и способы хранения данных. 📦
JSON — универсальный формат
JSON — это как универсальный язык для данных. Все его понимают, и он легко читается. Идеален для небольших объёмов данных:
import json
# Сохраняем данные в JSON
data = [
{'name': 'Товар 1', 'price': 1000, 'rating': 4.5},
{'name': 'Товар 2', 'price': 2000, 'rating': 4.8},
]
# Простое сохранение
with open('products.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# Или одной строкой (без форматирования)
json_string = json.dumps(data, ensure_ascii=False)
# Чтение
with open('products.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print(loaded_data)
CSV — для таблиц и Excel
CSV — это как Excel, но проще. Отлично подходит для табличных данных:
import csv
# Сохраняем в CSV
data = [
['Название', 'Цена', 'Рейтинг'],
['Товар 1', 1000, 4.5],
['Товар 2', 2000, 4.8],
]
with open('products.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerows(data)
# Или через DictWriter (удобнее)
products = [
{'name': 'Товар 1', 'price': 1000, 'rating': 4.5},
{'name': 'Товар 2', 'price': 2000, 'rating': 4.8},
]
with open('products.csv', 'w', newline='', encoding='utf-8') as f:
fieldnames = ['name', 'price', 'rating']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(products)
# Чтение
with open('products.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
Excel — для красоты
Если нужен красивый Excel файл с форматированием, используй openpyxl или pandas:
# pip install openpyxl pandas
import pandas as pd
# Создаём DataFrame
df = pd.DataFrame([
{'Название': 'Товар 1', 'Цена': 1000, 'Рейтинг': 4.5},
{'Название': 'Товар 2', 'Цена': 2000, 'Рейтинг': 4.8},
])
# Сохраняем в Excel
df.to_excel('products.xlsx', index=False, engine='openpyxl')
# Чтение
df = pd.read_excel('products.xlsx')
print(df)
SQLite — простая база данных
SQLite — это база данных в одном файле. Не требует установки сервера, идеальна для небольших проектов:
import sqlite3
# Создаём базу данных
conn = sqlite3.connect('products.db')
cursor = conn.cursor()
# Создаём таблицу
cursor.execute('''
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL,
rating REAL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Вставляем данные
products = [
('Товар 1', 1000, 4.5),
('Товар 2', 2000, 4.8),
]
cursor.executemany(
'INSERT INTO products (name, price, rating) VALUES (?, ?, ?)',
products
)
conn.commit()
# Читаем данные
cursor.execute('SELECT * FROM products')
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
PostgreSQL — для серьёзных проектов
Если данных много и нужна производительность, используй PostgreSQL:
# pip install psycopg2
import psycopg2
from psycopg2.extras import execute_values
# Подключение
conn = psycopg2.connect(
host="localhost",
database="parsing_db",
user="user",
password="password"
)
cursor = conn.cursor()
# Создаём таблицу
cursor.execute('''
CREATE TABLE IF NOT EXISTS products (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2),
rating DECIMAL(3, 2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Массовая вставка (быстро!)
products = [
('Товар 1', 1000, 4.5),
('Товар 2', 2000, 4.8),
]
execute_values(
cursor,
'INSERT INTO products (name, price, rating) VALUES %s',
products
)
conn.commit()
cursor.close()
conn.close()
Универсальная функция экспорта
Создадим функцию, которая сохраняет данные в любой формат:
def export_data(data, filename, format='json'):
"""Универсальная функция экспорта"""
if format == 'json':
with open(f'{filename}.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
elif format == 'csv':
import csv
with open(f'{filename}.csv', 'w', newline='', encoding='utf-8') as f:
if data:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
elif format == 'excel':
import pandas as pd
df = pd.DataFrame(data)
df.to_excel(f'{filename}.xlsx', index=False)
elif format == 'sqlite':
import sqlite3
conn = sqlite3.connect(f'{filename}.db')
cursor = conn.cursor()
if data:
# Создаём таблицу на основе ключей первого элемента
keys = list(data[0].keys())
columns = ', '.join([f'{k} TEXT' for k in keys])
cursor.execute(f'CREATE TABLE IF NOT EXISTS data ({columns})')
# Вставляем данные
for item in data:
values = [str(v) for v in item.values()]
placeholders = ', '.join(['?' for _ in values])
cursor.execute(f'INSERT INTO data VALUES ({placeholders})', values)
conn.commit()
conn.close()
print(f"Данные сохранены в {filename}.{format}")
# Использование
data = [{'name': 'Товар 1', 'price': 1000}]
export_data(data, 'products', 'json')
export_data(data, 'products', 'csv')
export_data(data, 'products', 'excel')
Итоги
Выбор формата зависит от задачи: JSON для простых данных, CSV для таблиц, SQLite для небольших БД, PostgreSQL для больших объёмов. Главное — сохранять данные регулярно, чтобы не потерять результаты парсинга! 💾