Temu — это быстрорастущая платформа электронной коммерции, известная своим огромным выбором товаров по конкурентоспособным ценам. Охватывая все: от электроники до моды и товаров для дома, Temu стал местом назначения для онлайн-покупателей. Его динамичные страницы, отображаемые с помощью JavaScript, усложняют сбор данных традиционными методами, но с правильными инструментами это все еще достижимо.

В этом руководстве мы покажем вам, как извлечь данные из Temu с помощью Crawlbase Crawling API, разработанный для обработки CAPTCHA и страниц, отображаемых JavaScript. Если вы хотите собрать информацию о продукте для анализа, сравнения цен или исследования рынка, этот блог охватит все основные шаги для эффективного извлечения данных. Вы узнаете, как настроить среду Python, создать скраперы Temu, обрабатывать пагинацию Temu SERP и хранить данные в CSV-файле для легкого доступа.

К концу этой статьи у вас будут готовые скраперы для извлечения ценных данных из листингов и страниц продуктов Тему. Давайте начнем!

Содержание

  1. Зачем царапать Тему?
  2. Ключевые данные для извлечения из Тему
  3. Crawlbase Crawling API для Тему Скребок
  • Crawlbase Библиотека Python
  1. Настройка среды Python
  • Установка Python и необходимых библиотек
  • Выбор IDE
  1. Скрапинг Тему Поисковые списки
  • Проверка HTML на наличие селекторов CSS
  • Написание скребка списков поиска
  • Обработка пагинации в Temu
  • Хранение данных в CSV-файле
  • Полный пример кода
  1. Очистка страниц продуктов Temu
  • Проверка HTML на наличие селекторов CSS
  • Написание скрапера страницы продукта
  • Хранение данных в CSV-файле
  • Полный пример кода
  1. Заключение
  2. FAQ

Зачем царапать Тему?

Изображение, показывающее причины соскабливания Тему

Скрапинг Temu полезен для предприятий, аналитиков и разработчиков. В Temu есть все: от дешевой электроники до одежды и предметов домашнего обихода, поэтому это отличный источник для исследования рынка, отслеживания цен и анализа конкурентов. Извлекая данные о продуктах, такие как цены, описания, рейтинги и доступность, предприятия могут оставаться конкурентоспособными и идти в ногу с рынком.

Например, скрапинг Temu может помочь интернет-ритейлерам и реселлерам находить популярные продукты, понимать тенденции ценообразования и отслеживать наличие на складе. Для личных проектов или академических целей данные Temu можно использовать для создания инструментов сравнения цен, изучения потребительских тенденций или просмотра производительности продукта с течением времени.

Temu использует CAPTCHA и JavaScript, поэтому традиционные скраперы не могут собирать данные. Но с Crawlbase Crawling API Вы можете получить структурированные данные от Temu.

Ключевые данные для извлечения из Тему

При скрапинге Temu вам нужно будет собрать самые важные сведения о продукте для поддержки ваших целей, будь то анализ рынка, отслеживание продукта или создание базы данных. Вот точки данных, которые вы можете извлечь из Temu:

  • Наименование товара: Название помогает идентифицировать каждый продукт и категорию.
  • Цена: Цена важна для отслеживания тенденций и сравнения аналогичных продуктов.
  • Рейтинг и обзоры: Отзывы дают представление о качестве продукции и удовлетворенности клиентов, а рейтинги отражают общее мнение клиентов.
  • Описание товара:: Описания дают контекст для характеристик продукта, материала и уникальных торговых предложений.
  • URL изображения: Изображения важны для визуальной базы данных и могут использоваться на любом сайте или в любом приложении, которые вы создаете.
  • Скидки и предложения: Они могут показывать конкурентоспособные цены и трендовые продукты.

Crawlbase Crawling API для Тему Скребок

The Crawlbase Crawling API делает парсинг Temu эффективным и простым, особенно потому, что Temu использует JavaScript для большей части своего контента, что затрудняет традиционные методы парсинга. Crawlbase решает эту проблему, отображая веб-страницы как настоящий браузер, предоставляя вам доступ к полностью загруженному HTML.

Вот почему Crawlbase Crawling API идеально подходит для соскребания Тему:

  • Обрабатывает динамический контент: Crawlbase управляет страницами с большим объемом JavaScript, чтобы все данные о продуктах на Temu были загружены и готовы к извлечению.
  • Ротация IP: Чтобы обойти проверки безопасности Тему, Crawlbase автоматически меняет IP-адреса, предотвращая ограничения скорости и снижая вероятность блокировки.
  • Быстро и эффективно: Crawlbase позволяет быстро извлекать огромные объемы данных, экономя время и ресурсы.
  • Настраиваемые запросы: Вы можете управлять заголовками, файлами cookie и другими параметрами запроса в соответствии с вашими потребностями в парсинге.

Crawlbase Библиотека Python

The Crawlbase Библиотека Python еще больше упрощает настройку скрапинга. Чтобы использовать библиотеку, вам понадобится токен доступа, который вы можете получить регистрацией для Crawlbase.

Вот пример функции для запроса Crawlbase Crawling API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
от база сканирования Импортировать CrawlingAPI

# Инициализация Crawlbase API с вашим токеном доступа
crawling_api = CrawlingAPI({ токен: 'ВАШ_ТОКЕН_БАЗЫ_КРАНА' })

защиту make_crawlbase_request(URL):
ответ = crawling_api.get(url)

if ответ["заголовки"]['статус_ПК'] == '200':
html_content = ответ['тело'].decode('utf-8')
возвращают html_контент
еще:
Распечатать(f"Не удалось загрузить страницу. Crawlbase код статуса: {ответ["заголовки"]['статус_ПК']}")
возвращают Ничто

Внимание: Для извлечения контента, обработанного с помощью JavaScript, например, контента Тему, вам понадобится токен JavaScript (JS) из Crawlbase. Crawlbase предлагает 1,000 бесплатных запросов, чтобы помочь вам начать, и для регистрации не требуется кредитная карта. Для получения дополнительных рекомендаций посетите официальный Crawlbase Crawling API документации.

В следующем разделе мы рассмотрим настройку среды Python для парсинга Temu.

Настройка среды Python

Чтобы начать скрейпинг Temu, вам нужно настроить среду Python. Это означает установку Python и необходимых библиотек и выбор интегрированной среды разработки (IDE) для написания кода.

Установка Python и необходимых библиотек

Во-первых, убедитесь, что на вашем компьютере установлен Python. Вы можете скачать Python с сайта Официальном сайте. Следуйте инструкциям по установке для вашей ОС.

Теперь, когда у вас установлен Python, вам нужно установить некоторые библиотеки, которые помогут с скрейпингом. Необходимые библиотеки: requests и crawlbase. Вот как их установить с помощью pip:

  1. Откройте командную строку или терминал.
  2. Введите следующие команды и нажмите Enter:
1
2
запросы на установку pip
pip установить crawlbase

Эти команды загрузят и установят необходимые вам библиотеки. Библиотека запросов поможет вам делать веб-запросы. Библиотека crawlbase позволяет вам взаимодействовать с Crawlbase Crawling API.

Выбор IDE

Теперь вам нужно выбрать IDE для кодирования. IDE — это программа, которая помогает вам писать, редактировать и управлять вашим кодом. Вот несколько вариантов:

  • PyCharm: Полноценная среда разработки Python с инструментами автодополнения кода и отладки; доступна бесплатная версия Community Edition.
  • Код Visual Studio (код VS): Легкий редактор с поддержкой Python через расширения и огромной базой пользователей.
  • Jupyter Notebook: Отлично подходит для анализа и тестирования данных, код можно выполнить в браузере для удобства обмена.

У каждого есть свои преимущества, поэтому выберите тот, который вам подходит. Теперь, когда ваша среда Python настроена, вы готовы начать скрейпинг списков поиска Temu.

Скрапинг Тему Поисковые списки

Скрапинг результатов поиска Temu включает в себя понимание структуры HTML страницы, написание скрипта для сбора информации о продукте, управление пагинацией с помощью кнопки «Подробнее» и сохранение скрапинга в структурированном виде. Давайте разберем это.

Проверка HTML на наличие селекторов CSS

Чтобы начать скрапинг, проверьте HTML-структуру страницы результатов поиска Temu. Откройте сайт Temu в своем браузере, щелкните правой кнопкой мыши по списку продуктов и выберите «Проверить», чтобы увидеть HTML-код.

Скриншот HTML-файла списков поиска Temu для CSS

Вот основные элементы, которые вам понадобятся:

  • Наименование товара: Найдено в пределах h2 тег с классом _2BvQbnbN.
  • Цена: Расположен в пределах span тег с классом _2de9ERAH.
  • URL изображения: Расположен в src атрибут img тег с классом goods-img-external.
  • URL-адрес продукта: Найдено в атрибуте href a тег с классом _2Tl9qLr1.

Определив эти селекторы, вы получите базовую структуру, необходимую для извлечения данных о каждом продукте из результатов поиска Temu.

Написание скребка списков поиска

Теперь, когда мы знаем селекторы, давайте напишем скрапер. Мы будем использовать Python вместе с Crawlbase Crawling API для обработки динамического контента. Вот функция для начала сбора информации о продукте:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп

# Инициализация Crawlbase API с JS-токеном
crawling_api = CrawlingAPI({ токен: 'CRAWLBASE_JS_TOKEN' })

# Функция для извлечения списков поиска Temu
защиту scrape_temu_search(URL):
ответ = crawling_api.get(url, {
'ajax_wait': 'правда',
'page_wait': '5000'
})

if ответ["заголовки"]['статус_ПК'] == '200':
html_content = ответ['тело'].decode('utf-8')
суп = КрасивыйСуп(html_content, 'html.парсер')

продукты = []
для пункт in суп.выбрать('div.js-search-goodsList > div.autoFitList > div.EKDT7a3v'):
заголовок = элемент.выберите_один('h2._2BvQbnbN').текст.полоска() if элемент.выберите_один('h2._2BvQbnbN') еще ''
цена = item.select_one('span._2de9ERAH').текст.полоска() if элемент.выберите_один('span._2de9ERAH') еще ''
image_url = item.select_one('img.goods-img-внешний')['источник'] if элемент.выберите_один('img.goods-img-внешний') еще ''
URL-адрес_продукта = 'https://www.temu.com' + элемент.выберите_один('a._2Tl9qLr1')['href'] if элемент.выберите_один('a._2Tl9qLr1') еще ''
продукты.добавить({
'заглавие': заголовок,
'цена': цена,
'url_изображения': URL-адрес_изображения,
'url_продукта': URL-адрес_продукта
})

возвращают продукты
еще:
Распечатать(f"Не удалось загрузить страницу. Статус: {ответ["заголовки"]['статус_ПК']}")
возвращают Ничто

Эта функция извлекает HTML, обрабатывает его с помощью BeautifulSoup и извлекает данные о продукте на основе селекторов. Она возвращает список информации о продукте.

Обработка пагинации в Temu

Temu использует кнопку «Подробнее» для загрузки дополнительных списков. Мы можем имитировать нажатия на эту кнопку с помощью Crawlbasecss_click_selector для доступа к большему количеству страниц:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Функция для извлечения списков с разбивкой на страницы
защиту scrape_temu_with_pagination(URL):
продукты = []
ответ = crawling_api.get(url, {
'ajax_wait': 'правда',
'page_wait': '5000',
'css_click_selector': 'div.R8mNGZXv[role="button"]'
})

if ответ["заголовки"]['статус_ПК'] == '200':
html_content = ответ['тело'].decode('utf-8')
суп = КрасивыйСуп(html_content, 'html.парсер')
продукты.extend(извлечь_информацию_о_продукте(суп))

возвращают продукты

Этот код собирает списки с нескольких страниц, «нажимая» кнопку «Подробнее» каждый раз при загрузке новой партии результатов.

Хранение данных в CSV-файле

Чтобы сохранить собранные данные в CSV-файле, мы запишем информацию о каждом продукте в строки, создав структурированный формат файла для удобного анализа.

1
2
3
4
5
6
7
8
9
Импортировать CSV

# Функция сохранения данных о продукте в CSV
защиту сохранить_в_csv(данные, имя файла='temu_products.csv'):
открытый(имя файла, режим='w', новая строка='', кодировка='utf-8') as файл:
писатель = csv.DictWriter(файл, имена полей=['заглавие', 'цена', 'url_изображения', 'url_продукта'])
писатель.writeheader()
для пункт in данные:
писатель.writerow(элемент)

Этот код создает CSV-файл со столбцами для каждой точки данных, что упрощает анализ списков Temu в автономном режиме.

Полный пример кода

Вот полный скрипт для извлечения списков поиска Temu, обработки пагинации и сохранения данных в CSV:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать CSV

# Инициализация Crawlbase API с вашим JS-токеном
crawling_api = CrawlingAPI({ токен: 'CRAWLBASE_JS_TOKEN' })

# Извлечь сведения о продукте из HTML
защиту извлечь_информацию_о_продукте(суп):
продукты = []
для пункт in суп.выбрать('div.js-search-goodsList > div.autoFitList > div.EKDT7a3v'):
заголовок = элемент.выберите_один('h2._2BvQbnbN').текст.полоска() if элемент.выберите_один('h2._2BvQbnbN') еще ''
цена = item.select_one('span._2de9ERAH').текст.полоска() if элемент.выберите_один('span._2de9ERAH') еще ''
image_url = item.select_one('img.goods-img-внешний')['источник'] if элемент.выберите_один('img.goods-img-внешний') и элемент.выберите_один('img.goods-img-внешний').has_attr('источник') еще ''
URL-адрес_продукта = 'https://www.temu.com' + элемент.выберите_один('a._2Tl9qLr1')['href'] if элемент.выберите_один('a._2Tl9qLr1') еще ''
продукты.добавить({
'заглавие': заголовок,
'цена': цена,
'url_изображения': URL-адрес_изображения,
'url_продукта': URL-адрес_продукта
})
возвращают продукты

# Функция для извлечения списков с разбивкой на страницы
защиту scrape_temu_with_pagination(URL):
продукты = []
ответ = crawling_api.get(url, {
'ajax_wait': 'правда',
'page_wait': '5000',
'css_click_selector': 'div.R8mNGZXv[role="button"]'
})

if ответ["заголовки"]['статус_ПК'] == '200':
html_content = ответ['тело'].decode('utf-8')
суп = КрасивыйСуп(html_content, 'html.парсер')
продукты.extend(извлечь_информацию_о_продукте(суп))

возвращают продукты

# Сохраните полученные данные в CSV
защиту сохранить_в_csv(данные, имя файла='temu_products.csv'):
открытый(имя файла, режим='w', новая строка='', кодировка='utf-8') as файл:
писатель = csv.DictWriter(файл, имена полей=['заглавие', 'цена', 'url_изображения', 'url_продукта'])
писатель.writeheader()
для пункт in данные:
писатель.writerow(элемент)

# Пример использования
продукты = scrape_temu_with_pagination('https://www.temu.com/search?q=ваш_поисковый_запрос')
сохранить_в_csv(продукты)

temu_products.csv Снимок:

Вывод скребка Temu SERP

Очистка страниц продуктов Temu

После сбора списка URL-адресов продуктов из поисковых списков Temu следующим шагом будет извлечение данных из каждой страницы продукта. Это позволит нам собрать более конкретную информацию, такую ​​как подробные описания, характеристики и обзоры. Вот как это сделать.

Проверка HTML на наличие селекторов CSS

Для начала проверьте структуру HTML на странице продукта Temu. Откройте URL-адрес продукта в браузере, щелкните правой кнопкой мыши элементы, которые вы хотите скопировать, и выберите «Проверить».

Скриншот HTML-страниц продуктов Temu для CSS

Ключевые элементы, на которые следует обратить внимание, включают:

  • Название продукта: Обычно встречается в div тег с классом вроде _2rn4tqXP.
  • Цена: Обычно внутри div тег с классом вроде _1vkz0rqG, выбрав последний span ребенка по фактической цене.
  • Описание товара:: Часто в теге div с классом, например B_OB3uj0, предоставляя подробную информацию о продукте.
  • URL-адрес изображения: Обычно расположен в src атрибут img теги внутри div с role="button" и класс вроде wxWpAMbp.

Определение этих селекторов упрощает извлечение необходимых данных для каждого продукта.

Написание скрапера страницы продукта

С отмеченными селекторами CSS мы можем написать скрапер для сбора данных с каждой страницы продукта. Мы будем использовать Python вместе с Crawlbase Crawling API, для обработки динамического контента.

Вот пример функции для извлечения информации о продукте со страницы продукта Temu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать re

# Инициализация Crawlbase API с JS-токеном
crawling_api = CrawlingAPI({ токен: 'CRAWLBASE_JS_TOKEN' })

# Функция для извлечения страницы продукта Temu
защиту очистить_страницу_продукта(URL):
ответ = crawling_api.get(url, {
'ajax_wait': 'правда',
'page_wait': '5000'
})

if ответ["заголовки"]['статус_ПК'] == '200':
html_content = ответ['тело'].decode('utf-8')
суп = КрасивыйСуп(html_content, 'html.парсер')

# Извлечь сведения о продукте
заголовок = re.sub(г'\с+', '', суп.выберите_один('div._2rn4tqXP').текст.полоска())
цена = суп.выберите_один('div._1vkz0rqG span:last-child').текст.полоска()
описание = re.sub(г'\с+', '', суп.выберите_один('div.B_OB3uj0').текст.полоска())
URL_изображений = [img['источник'] для IMG in суп.выбрать('div[role="button"] img.wxWpAMbp')]

# Возвращает сведения о продукте в виде словаря
возвращают {
'заглавие': заголовок,
'цена': цена,
'описание': описание,
'images_url': URL-адрес_изображения,
'url_продукта': URL-адрес
}
еще:
Распечатать(f"Не удалось загрузить страницу. Статус: {ответ["заголовки"]['статус_ПК']}")
возвращают Ничто

В этой функции мы используем BeautifulSoup для разбора HTML и нахождения каждого элемента с помощью идентифицированных селекторов. Это возвращает словарь с подробностями о продукте.

Хранение данных в CSV-файле

После того, как мы собрали информацию о продукте, мы можем сохранить ее в файле CSV. Это помогает нам организовать наши данные и облегчить их просмотр или анализ в дальнейшем.

1
2
3
4
5
6
7
8
9
Импортировать CSV

# Функция сохранения данных о продукте в CSV
защиту сохранить_данные_о_продукте_в_csv(данные, имя файла='temu_product_details.csv'):
открытый(имя файла, режим='w', новая строка='', кодировка='utf-8') as файл:
писатель = csv.DictWriter(файл, имена полей=['заглавие', 'цена', 'описание', 'images_url', 'url_продукта'])
писатель.writeheader()
для пункт in данные:
писатель.writerow(элемент)

Эта функция записывает информацию о каждом продукте в CSV-файл со столбцами для каждой детали.

Полный пример кода

Ниже представлен полный скрипт для извлечения данных из нескольких страниц продуктов из Temu с использованием URL-адресов из результатов поиска и сохранения данных в файл CSV.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать CSV
Импортировать re

# Инициализация Crawlbase API с вашим JS-токеном
crawling_api = CrawlingAPI({ токен: 'CRAWLBASE_JS_TOKEN' })

# Функция для извлечения информации из одной страницы продукта
защиту очистить_страницу_продукта(URL):
ответ = crawling_api.get(url, {
'ajax_wait': 'правда',
'page_wait': '5000'
})

if ответ["заголовки"]['статус_ПК'] == '200':
html_content = ответ['тело'].decode('utf-8')
суп = КрасивыйСуп(html_content, 'html.парсер')

# Извлечь сведения о продукте
заголовок = re.sub(г'\с+', '', суп.выберите_один('div._2rn4tqXP').текст.полоска())
цена = суп.выберите_один('div._1vkz0rqG span:last-child').текст.полоска()
описание = re.sub(г'\с+', '', суп.выберите_один('div.B_OB3uj0').текст.полоска())
URL_изображений = [img['источник'] для IMG in суп.выбрать('div[role="button"] img.wxWpAMbp')]

# Возвращает сведения о продукте в виде словаря
возвращают {
'заглавие': заголовок,
'цена': цена,
'описание': описание,
'images_url': URL-адрес_изображения,
'url_продукта': URL-адрес
}
еще:
Распечатать(f"Не удалось загрузить страницу. Статус: {ответ["заголовки"]['статус_ПК']}")
возвращают Ничто

# Функция сохранения данных в CSV
защиту сохранить_данные_о_продукте_в_csv(данные, имя файла='temu_product_details.csv'):
открытый(имя файла, режим='w', новая строка='', кодировка='utf-8') as файл:
писатель = csv.DictWriter(файл, имена полей=['заглавие', 'цена', 'описание', 'url_изображения', 'url_продукта'])
писатель.writeheader()
для пункт in данные:
писатель.writerow(элемент)

# Соберите несколько страниц продукта и сохраните в CSV
product_urls = [
'https://www.temu.com/pk-en/goods-detail-g-601099527865713.html',
'https://www.temu.com/pk-en/goods-detail-g-601099537192760.html',
# Добавьте сюда больше URL-адресов продуктов
]
все_продукты = []

для URL in URL-адреса_продуктов:
данные_продукта = очистить_страницу_продукта(url)
if данные_о_продукте:
все_продукты.append(данные_продукта)

# Сохраните все данные о продукте в CSV
сохранить_данные_о_продуктах_в_csv(все_продукты)

temu_product_details.csv Снимок:

Вывод страницы продукта Temu Scraper

Заключение

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

Посмотрите на график Crawlbase Crawling API управляет контентом с большим содержанием JavaScript, упрощая сбор данных. Не забудьте ознакомиться с условиями обслуживания Temu, чтобы избежать проблем, поскольку чрезмерное скрапинг может повлиять на их серверы.

Регулярно тестируйте и обновляйте свой код, поскольку структуры веб-сайтов могут меняться, требуя корректировки селекторов CSS или логики. Если вы заинтересованы в изучении парсинга с других платформ электронной коммерции, не стесняйтесь изучать следующие всеобъемлющие руководства.

📜 Как скрейпить Amazon
📜 Как взломать Walmart
📜 Как скрейпить AliExpress
📜 Как очистить Zalando
📜 Как соскребать Costco

Обратитесь к нашему поддержка если у вас есть вопросы. Счастливого скрапинга!

FAQ

В. Безопасно ли и законно ли копать Тему?

Сбор данных Temu для личных исследовательских, аналитических или образовательных целей в целом приемлем, но крайне важно следовать условиям обслуживания Temu. Избегайте интенсивного сбора данных, который может повлиять на их серверы или нарушить политику. Всегда проверяйте их последние условия, чтобы оставаться соответствующими, и учитывайте этичные методы сбора данных.

В. Как часто мне следует обновлять код скрапинга для Temu?

Веб-сайты могут менять свою структуру, особенно селекторы HTML и CSS, что может сломать ваш парсер. Хорошей идеей будет регулярно тестировать ваш парсер — по крайней мере, раз в месяц или когда вы заметите, что данные собираются неправильно. Если ваш парсер перестал работать, проверьте сайт на наличие обновленных селекторов и скорректируйте свой код.

В. Могу ли я хранить данные Temu в базе данных вместо CSV-файла?

Да, хранение извлеченных данных в базе данных (например, MySQL или MongoDB) — хороший вариант для крупных проектов. Базы данных облегчают запросы и анализ данных с течением времени. Вы можете заменить этап хранения CSV в своем коде на команды базы данных и получить более эффективную и масштабируемую настройку.