Разработка приложения-парсер на Node. JS для Яндекс.Wordstat
19
1. Словарь терминов
1.1 Платформа запуска: платформа Node.js (версия v14.16.0, npm версии 7.6.3), расположенная на сервере, где ведется основная разработка;
1.2 База данных: MongoDB (версия v4.2.12), расположенная на сервере, где ведется основная разработка на порту 27017;
1.3 Яндекс.Wordstat: серверное приложение компании Яндекс, хранящая историю поисковых запросов, расположена по адресу https://wordstat.yandex.ua/;
1.4 Обращение к Яндекс.Wordstat: процесс получения информации одним пользователем об истории запроса по одному ключевому слову с Яндекс.Wordstat;
1.5 Ниша - семантическая единица, определяющая инвестиционные возможности, представляет из себя комбинацию лексем (в рамках данного ТЗ, одна лексекма строго соответствует одной нише;
1.6 Лексема - составная единица ниши, представляет из себя массив слов, которые ьогут быть использованиы для определения одной и той же ниши;
1.7 Ключевое слово запроса: слово по которому ищется информация на Яндекс.Wordstat о количестве поисковых запросов;
1.8 Регион запроса: Название региона по которому ищется информация на Яндекс.Wordstat о количестве поисковых запросов;
1.9 Логирование: запись в реальном времени об успешных и неуспешных результатах работы приложения , а также об ошибках.
2. Назначение разработки
Приложение Парсер запускается в режиме реального времени, осуществляет обращение к сайту https://wordstat.yandex.ua/ раздел history, забирает информацию об истории запросов по заданному списку ключевых слов и записывает полученную информацию в БД.
3. Технические условия и требования
3.1 Парсер должен запускается на платформе Node.js;
3.2 Парсер должен быть написан на языке JavaScript в режиме strict;
3.3 Приложение должно работать с БД MongoDB;
3.4 Должна быть предусмотрена гибкая настройка приложения (аккаунты пользователей Яндекс.Wordstat, proxy IP адреса для подмены при обращениях к Яндекс.Wordstat, параметры, задающие поведение пользователя);
3.5 Необходимо обеспечить достаточный уровень логирования работы программы.
4. Логика работы приложения
4.1 Приложение принимает на вход следующую информацию из БД:
4.1.1 из коллекции БД parserAccounts массив объектов:
{
searcher: "Yandex", // Поисковая система
login: String, // Логин доступа к Яндекс.Wordstat
passwd: String, // Пароль доступа к Яндекс.Wordstat
};
4.1.2 из коллекции БД parserProxy массив объектов:
{
proxyserver: String, // Адрес proxy-сервера
proxyip: String, // Прокси IP bp из набора для proxy-сервера
};
4.1.3 из коллекции БД parserAnticaptcha массив объектов:
{
acservice: String, // Адрес сервиса антикапчи
ackey: String, // Ключ доступа к сервису антикапчи
};
4.1.4 из коллекции БД parserBehavior объект:
{
searcher: "Yandex", // Поисковая система
timeout: Number, // Задержки, выполняемые каждым потоком между запросами к Яндекс.Wordstat
amountstreams: Number, // Максимальное общее количество потоков при работе с Яндекс.Wordstat
};
4.1.5 из коллекции БД lexems массив объектов:
{
name: String, // Текст ключевого запроса
forms: [String], // Массив слов
};
4.1.6 из коллекции БД niches массив объектов:
{
name: String, // Имя ниши
};
4.1.7 из коллекции БД regions массив объектов:
{
name: String, // Название региона
country: String, // Название страны
};
4.2 Для каждой ниши из коллекции niches и для каждого региона из коллеции regions составляется ключевой запрос с учетом всех вариантов слов, содержащихся в соответствующей лексеме;
4.3 Для каждого получившегося списка ключевых запросов одной ниши Парсер осуществляет обращение на Яндекс.Wordstat и извлекает информацию о количестве поисковых запросов за последние 24 месяца.
4.4 В процессе обращения на Яндекс.Wordstat совершается подмена IP из имеющегося набора IP адресов.
4.5 В процессе обращения на Яндекс.Wordstat обходится капча при помощи соответствующей службы или набора служб.
4.6 При обращении на Яндекс.Wordstat имитируется естественное поведение пользователя, согласно первоначальным настройкам.
4.7 Производится сложение получившихся массивов количеств поисковых запросов по совпадающим периодам;
4.8 Если обращение успешно, то формируется новая запись массива количеств поисковых запросов или обновляется старая запись в БД в коллекцию requests следующей структуры:
{
niche: ObjectId, // Ссылка на нишу
nameniche: String,// Имя ниши
date: Date, // Время обращения к Яндекс.Wordstat
region: ObjectId, // Регион запроса
nameregion: String,// Имя региона запроса
lastperiod: Date, // Последний период, по которому есть информация
volumes: [Number], // Массив (24) числа поисковых запросов по периодам, начиная с <lastperiod>
}
4.9 При успешном обращении также делается соответствующая запись в лог-файл.
4.10 При ошибке делается соответствующая запись в лог-файл.