Я уже давно пишу статьи про различные аспекты IT-технологий, инвестиции, автоматизацию и умные дома на разных площадках: Хабр, Т—Ж, СмартЛаб, Пикабу, VC.ru и других.

За всё время накопилось примерно 250 статей, которые по итогу свёл в таблицу. Но вот задумываться о популярности статей и их реальном эффекте стал относительно недавно.

Почему я решил собирать статистику публикаций?

Главной целью всех этих публикаций было поделиться своим опытом и при этом попытаться понять насколько вообще это важно и актуально для читателей. Однако обратная связь была не всегда очевидной: где-то комментариев вообще не было, а иногда на Хабре статьи набирали большой рейтинг при малом количестве комментариев (но это редко).

Однако очевидно одно - статистика заставляет посмотреть на материалы со стороны. Например статья про то, как я при помощи двух скриптов смог автоматически сгенерировать опись документов для 700 страниц на непрофильном Пикабу собрала три месяца назад почти 75 тысяч просмотров и 80 комментариев, а на Хабре эта же тема была не особо популярна.
Или статья про то, что читали на Хабре в 2024 году: анализ статей с Node.js, Google Sheets и каплей ChatGPT - собрала на Хабре три недели назад рейтинг +68, но «всего» 7 тысяч просмотров.

Зачем я написал Open Source скрипт?

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

Это Open Source скрипт, размещенный на Гитхабе, который состоит из Google Apps Script и Node.js частей и обе эти части работают с итоговой сводной Google Таблицей.

Если вы автор или агентство и хотите видеть полную картину популярности ваших материалов, выявлять, какие темы интересуют аудиторию, а какие требуют доработки, автоматизированный инструмент сбора данных - это то, что вам нужно. Я уже испытал это на себе и расскажу подробнее об этом в статье.

Особенности механизма парсинга сайтов, где размещены публикации

Изначально я использовал Google Apps Script внутри Гугл Таблиц для автоматизации извлечения просмотров, комментариев, закладок, рейтинга. Однако по мере того, как я расширялся на новые платформы, то обнаружил, что некоторые сайты ограничивают доступ к определенным данным, что потребовало от меня перехода на серверный язык JavaScript - Node.js.

Конкретный пример: сайт инвесторов и трейдеров Смартлаб имеет скр��тое АПИ для получения просмотров статей.

Если обращение идёт через Google Apps Script внутри Гугл Таблиц, то сервер просто не отдает просмотры, возвращая пустой ответ, потому что заголовки headers и User-Agent не поддерживаются Google Apps Script:

function fetchApiResponse() {
  const url = 'https://smart-lab.ru/cgi-bin/gcn.fcgi?list=1083556&func=func8422&_=1731928577852';

  try {
    // Выполняем запрос к API с детализированными заголовками
    const response = UrlFetchApp.fetch(url, {
      method: 'get', // HTTP метод GET
      muteHttpExceptions: true, // Не выбрасывать ошибки для HTTP ответов с кодами, отличными от 200
      headers: {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'Accept-Encoding': 'gzip, deflate, br, zstd',
        'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
        'Cache-Control': 'max-age=0',
        'Sec-CH-UA': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
        'Sec-CH-UA-Mobile': '?0',
        'Sec-CH-UA-Platform': '"Windows"',
        'Sec-Fetch-Dest': 'document',
        'Sec-Fetch-Mode': 'navigate',
        'Sec-Fetch-Site': 'none',
        'Sec-Fetch-User': '?1',
        'Upgrade-Insecure-Requests': '1'
      }
    });

    // Проверяем HTTP код ответа
    const responseCode = response.getResponseCode();
    if (responseCode !== 200) {
      console.error(`Ошибка: Получен HTTP код ответа ${responseCode}`);
      return;
    }

    // Получаем содержимое в виде обычного текста
    const content = response.getContentText();

    // Логируем необработанный ответ для отладки
    console.log('Необработанный ответ API:', content);

  } catch (error) {
    // Обрабатываем ошибки во время выполнения запроса
    console.error('Ошибка при выполнении запроса к API:', error.message);
  }
}
 
Google Apps Script
Google Apps Script

Если же запрос идёт через Node.js и использование User-Agent, то в ответ воз��ращается число просмотров даже без использования эмуляции браузера:

const axios = require('axios');

async function fetchApiResponse() {
    const url = 'https://smart-lab.ru/cgi-bin/gcn.fcgi?list=1083556&func=func8422&_=1731928577852';

    try {
        // Установка заголовка User-Agent для имитации браузера Chrome
        const options = {
            headers: {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
            }
        };

        // Выполнение запроса к API для получения просмотров
        const apiResponse = await axios.get(url, options);
        const responseText = apiResponse.data;

        // Логируем необработанный ответ для отладки
        console.log('Необработанный ответ API:', responseText);

    } catch (error) {
        // Обработка ошибок
        console.error(`Ошибка получения количества просмотров: ${error.message}`);
        return null;
    }
}

fetchApiResponse();
Node.js
Node.js

Проблема оценки популярности статей

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

Например, статья, выложенная одновременно на разных сайтах, может получить совершенно разные результаты. Уже упоминаемая выше статья "Как я при помощи двух скриптов смог автоматически сгенерировать опись документов для 700 страниц" собрала:

vc.ru:
225 / 3 / 2 / 2
Просмотры / Комментарии / Закладки / Рейтинг

Пикабу:
74 615 / 76 / 0 / 903
Просмотры / Комментарии / Закладки / Рейтинг

Хабр:
6 620 / 7 / 31 / +12
Просмотры / Комментарии / Закладки / Рейтинг

На Пикабу статья вызвала бурное обсуждение, в то время как на vc.ru аудитория осталась почти равнодушной.

Зачем собирать статистику публикаций?

Анализ метрик (просмотры, комментарии, закладки, рейтинг) помогает понять, что действительно интересует вашу аудиторию и какие темы популярны на различных ресурсах.

  • Просмотры: показывают, сколько людей заинтересовалось темой.

  • Комментарии: демонстрируют вовлечённость, обсуждения.

  • Закладки: отражают ценность материала для долгосрочного использования.

  • Рейтинг: индикатор общего одобрения.

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

Создание Open Source скрипта для сбора данных

За несколько лет написал Google Apps Script, а затем и Node.js, которые предназначены для автоматического сбора показателей публикаций с различных платформ.

Важно, что скрипты приспособлены к конкретной структуре каждой платформы, используя API (Тинькофф Журнал, Пикабу, Смартлаб) или парсинг HTML-кода (Хабр, vc.ru).

Различие Google Apps Script и Node.js версий

Если очень кратко, то версия на Google Apps Script проста в использовании, запускается прямо в браузере, идеальна для быстрой интеграции с таблицами Google, а Node.js версия мощнее, работает на сервере, подходит для более сложных задач и интеграций.

Google Apps Script – это облачное решение, подходящее для задач, не требующих больших вычислительных ресурсов. Он интегрирован в Google Workspace и позволяет легко работать с веб-страницами, API Google, используя встроенные функции. Однако его функционал ограничен, и он не может работать с ресурсоёмкими задачами или сложным парсингом.

Node.js – это серверная среда, использующая Javascript. Это мощное решение для сложного парсинга, работы с API, обработки больших объёмов данных и реализации сложных логик. Node.js позволяет использовать различные библиотеки (например, Axios, Cheerio, Puppeteer), расширяя возможности скрипта. Однако Node.js требует установки и настройки на сервере или локально.

Публикация скрипта на GitHub

Публикация скриптов на GitHub в рамках философии Open Source имеет несколько преимуществ. Во-первых, это позволяет другим пользователям использовать и адаптировать скрипт под свои нужды. Во-вторых, открытый исходный код способствует прозрачности и аудиту кода, что помогает обнаруживать и исправлять ошибки. В-третьих, сообщество разработчиков может помочь в улучшении и расширении функциональности скрипта, если захочет :)

Пример анализа собранной статистики для выбора будущих тем

Мне кажется немного некорректно проводить анализ собственных статей здесь и поэтому я оттолкнусь от анализа двух популярных платформ: Хабра и Смартлаба по всем их публикациям за 2024 год.

Откуда вообще я взял исходные данные для анализа всей платформы?

Исходные данные были получены мной путем парсинга двух ресурсов. Использовался автоматизированный сбор данных с использованием Node.js для парсинга HTML-страниц и последующего извлечения информации о каждой статье. Данные о просмотрах, комментариях, рейтинге и закладках позволяли оценить популярность и вовлеченность аудитории.

Фильтр по минимальному количеству просмотров (5 000 на Смартлабе, 30 000 на Хабре) и рейтингу (более 30 на Хабре) позволил отфильтровать статьи, которые не соответствовали критериям популярности.

Определение трендов и предпочтений аудитории для разных платформ: Хабр и Смартлаб.

Анализ показал, что у каждой платформы свои тренды.

Хабр более ориентирован на технические темы, такие как настройка программного обеспечения, обходы блокировок, разработка и советы по программированию. Наиболее популярные темы за 2024 год на Хабре - проблемы блокировки YouTube, решение проблем с GoodbyeDPI, уязвимости безопасности.

На Смартлабе, наоборот, доминируют темы, связанные с инвестициями, экономикой и геополитикой. Трендовые темы Смартлаба - санкции, рубль, ключевая ставка, дедолларизация, анализ рынка акций и облигаций.

Оптимизация публикаций под разные платформы: про что писать и на чём делать акценты.

Для эффективной публикации на каждой платформе важно учитывать интересы ее аудитории. На Хабре следует фокусироваться на конкретных технических проблемах и их решениях, практических советах и "человеческом" стиле. Статьи с интересными заголовками, посвященные узким, конкретным темам, вероятнее всего, получат бОльшую вовлеченность.

На Смартлабе, ключевым является анализ геополитических и экономических трендов, связанных с финансами. Оптимально создавать качественный аналитический контент, предлагающий рекомендации по инвестированию, с подкреплением фактами и экспертизой.

Выводы

Мой Open Source скрипт для автоматического сбора статистики (просмотры, комментарии, закладки, рейтинг) позволяет анализировать популярность статей на разных платформах, выявлять тренды и понять что разные платформы могут требовать разного контента.

Работа с Open Source инструментом делает этот процесс масштабируемым и полезным для других авторов и агентств.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

6 января 2025 г.