Реализация экспорта спарсенных данных (CSV/JSON/API)
Спарсенные данные нужны в разных форматах: аналитику — CSV для Excel, разработчику — JSON по API, интеграции с другой системой — webhook или прямой доступ к endpoint-у.
CSV-экспорт
Для больших объёмов (> 10k строк) не генерируем весь файл в памяти — стримим:
import csv
import io
from flask import Response, stream_with_context
def export_csv(site_id: int, filters: dict):
def generate():
output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=[
'id', 'name', 'price', 'currency', 'url', 'in_stock', 'scraped_at'
])
writer.writeheader()
yield output.getvalue()
output.truncate(0); output.seek(0)
for product in stream_products(site_id, filters):
writer.writerow(product)
yield output.getvalue()
output.truncate(0); output.seek(0)
return Response(
stream_with_context(generate()),
mimetype='text/csv',
headers={'Content-Disposition': 'attachment; filename=export.csv'},
)
JSON API
REST endpoint с фильтрацией, пагинацией и выбором полей:
GET /api/v1/scraped-products?site_id=7&in_stock=true&fields=name,price,url&page=1&per_page=100
{
"data": [
{ "name": "Кроссовки Nike Air Max", "price": 89.99, "url": "https://..." }
],
"meta": {
"page": 1,
"per_page": 100,
"total": 4823
}
}
Аутентификация — API-ключ в заголовке X-API-Key. Доступ ограничивается по IP и rate-limit (100 запросов/мин).
Webhook-нотификация
После завершения парсинга или при обновлении данных система отправляет POST на webhook URL клиента:
import httpx, hashlib, hmac
def send_webhook(url: str, secret: str, payload: dict):
body = json.dumps(payload).encode()
sig = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
httpx.post(url, content=body, headers={
'Content-Type': 'application/json',
'X-Signature-SHA256': f'sha256={sig}',
}, timeout=10)
Подпись позволяет получателю проверить подлинность запроса.
Сроки реализации
CSV и JSON API с базовой аутентификацией — 1–2 рабочих дня. Webhook с подписью, фильтры, выбор полей — ещё 1 день.







