Ночью (а точнее уже утром), я не мог уснуть, из-за навязчивой мысли в голове..

А что если спарсить часть статей с хабра и представить их в виде obsidian графа, будет ли это выглядеть, как красивая база знаний?

Откуда датасет?

Первым делом, я решил найти API хабра, для получения статей. Как я понял, они закрытые..

Мобильное приложение, насколько я знаю, тоже берёт статьи с сайта, без API.

Тогда, я вспомнил свой старый проект, который я начал делать, когда только учился парсингу (там был ужас по коду), скрапер на beautifulsoup4 и requests.

К моему удилению, когда я откопал его, и запустил, он заработал. За более чем за 2 года названия классов, по которым я получал данные не изменились.

Я решил переписать скрипт на асинхронный aiohttp, чтобы ускорить парсинг, но тут уже сам хабр внёс свои коррективы:

При асинхронном парсинге он кидается 503 статус-кодом и блокирует по ip на некоторое время (ничего личного, просто анти-ddos).

Значит придётся парсить последовательно, страницу, за страницей.

Одну страницу, при максимальной оптимизации, я собираю за 0.5 секунд, значит на парсинг всех статей (порядка миллиона возможных id) уйдёт 140 часов.

1_000_000 * 0.5 = 170

Затем нужно было немного переписать логику:

  • Перевести оформление из html в markdown, поддерживаемый в obsidian.

  • Разобраться с тегами, пользователями и названиями.

Интересный факт (из-за этого у меня крашнулся скрипт на начальном этапе): на хабре могут быть статьи без автора. Вы такое видели? Я вот, нет.

Уже начав собирать статьи я столкнулся с интересным поведением в консоли:

2025-09-15 00:45:26.017 | DEBUG    | __main__:fetch:77 - [938037:8659] 404
2025-09-15 00:45:26.598 | SUCCESS  | __main__:fetch:80 - [938036:8660] ok
2025-09-15 00:45:26.017 | DEBUG    | __main__:fetch:77 - [938035:8661] 404
2025-09-15 00:45:26.598 | SUCCESS  | __main__:fetch:80 - [938034:8662] ok

Статьи с нечётным id всегда выдавали статус-код 404, не найдено.

Я написал небольшой скрипт, для анализа логов. И моя гипотеза действительно подтвердилась: на хабре нет статей с нечётным id и это ускорит сбор статей в 2 раза.

Но в итоге, после очередного сбоя, я решил ограничиться базой из 43К статей (при таком кол-ве обсидиан загружает граф, в течение получаса).

Связи

Obsidian полюбили за возможность создания связей между заметками: теги, папки и так далее.

Если их не использовать, то магии на графе не будет.

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

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

Результаты

На выходе мы имеем такой граф:

Общий результат. Клеил из нескольких скриншотов.
Общий результат. Клеил из нескольких скриншотов.

Каждая точка - статья. Статьи сгруппированы по сложности (соответствующий цвет).

Видно, что каждая точка - статья, имеющая своё название.
Видно, что каждая точка - статья, имеющая своё название.

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

Вот к, к примеру, скопление статей @denis-19:

Резултат при наведении на автора.
Резултат при наведении на автора.

Самое интересное, что при наведение на статью/тег/автора мы видим всё, что с ним связано:

Результат при наведении на тег "Простой".
Результат при наведении на тег "Простой".

Благодарю за прочтение. Исходники доступны тут: https://gist.github.com/iamlostshe/438ac20068c81ffb58dabc3f953d8633

Комментарии (0)


  1. Javian
    16.09.2025 04:38

    Т.е. черные круги с ядром в центре это изолированные вселенные авторов?


    1. playermet
      16.09.2025 04:38

      Если честно, то визуально похоже на груди.


  1. rPman
    16.09.2025 04:38

    вы сохранили дамп загружаемых html файлов? можете опубликовать в виде торент файла? или хоть в каком то виде? а комментарии? это один запрос json файла...


    1. imalostshe Автор
      16.09.2025 04:38

      перегонял в markdown.

      комментарии не анализировал.

      на удивление, там не много по размеру получилось, всего пол гигабайта.


      1. rPman
        16.09.2025 04:38

        я правильно понимаю, вы загрузили только 40к статей? а не весь хабр? очень жаль


        1. imalostshe Автор
          16.09.2025 04:38

          да, граф больше мой комп не потянет(


          1. Dir15
            16.09.2025 04:38

            А что насчёт работы с таким объёмом Обсидиана в целом?


            1. imalostshe Автор
              16.09.2025 04:38

              да, он медленно соображает, при построении графа такого объёма, но копм (другие приложения) работают нормально.

              обса на одном ядре граф строит и из-за этого такие проблемы. многопотока нативного не хватает.


            1. AnonimYYYs
              16.09.2025 04:38

              Не знаю насчет обсидиана, работал с pyvis, там графы больше 10к обьектов превращаются в слайдшоу с 1 фпс и грузятся по три минуты, при этом машина неслабая. Но если отключить физику - все летает, хотя и красивой картинки со "сферами" не получится


          1. DarkViper
            16.09.2025 04:38

            А какое у вас железо? Чисто в теории MacBook Air на M4 / комп на R7 5800X3D + RTX 4070 TiS смогут отобразить больше? Дюже красивый граф получился просто...


  1. empenoso
    16.09.2025 04:38

    Круто!
    А шкурный комментарий можно? А я как автор как выгляжу там?


    1. imalostshe Автор
      16.09.2025 04:38

      Персональный граф.
      Персональный граф.

      Извиняюсь за долгий ответ, был не дома.


      1. empenoso
        16.09.2025 04:38

        Ого! Спасибо!
        А с кем я связан? Кто эти люди?


        1. Flammmable
          16.09.2025 04:38

          Ставлю на то, что это те люди, которых можно найти по поиску
          "empenoso -> Комментарии":
          https://habr.com/ru/search/?q=+empenoso&target\_type=comments&order=relevance&target_type=comments

          Там правда 18 упоминаний, а здесь всего связанных 5 узлов.
          Но ведь и статей проанализировано 43К вместо примерно 450К


          1. empenoso
            16.09.2025 04:38

            Ого! Не знал про такую конструкцию!


  1. domix32
    16.09.2025 04:38

    перегнали б в дазу данных, прикрутили б какой-нибудь D3.js и скрафтили б отдельный интерактивный граф


    1. imalostshe Автор
      16.09.2025 04:38

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

      обсидиан граф строит на одном ядре...

      но вообще, это в кчестве эксперемента, за 2 вечера было сделано, так что ок.


  1. ExoticHadron
    16.09.2025 04:38

    Интересно. В смысле красиво. Но без аналитики скучновато. Например, кто эти порядка 10 авторов, вокруг которых построены скопления узлов графа? Редакторы Хабра?

    Какие ещё закономерности вы обнаружили?


    1. Flammmable
      16.09.2025 04:38

      без аналитики скучновато

      Кхм-кхм, ну-у... :)
      Она есть у меня:
      https://habr.com/ru/articles/905052/


  1. Adgh
    16.09.2025 04:38

    Статьи с нечётным id всегда выдавали статус-код 404, не найдено.

    Накручивают счетчик?) С одной стороны понятно, что денюжка сама себя не заработает, с другой — странно, что отраслевой ресурс в нынешнее время решил не придерживаться AI-ready подхода, рискуя остаться на обочине истории


    1. imalostshe Автор
      16.09.2025 04:38

      не накручивают. это просто id, не общее число статей)

      я думал об этом, пока писал, что-то умнее резерва, не придумал.


  1. Okeu
    16.09.2025 04:38

    Такого количества уже наверное хватит на какой-нибудь космосим)))


  1. 4kirill20
    16.09.2025 04:38

    Наконец-то это кто-то показал! Вау

    На самом деле, для многих сайтов этого не хватает, для понимания объёма сайтов… может быть есть расширения для браузера, которые это отображают?


  1. Flammmable
    16.09.2025 04:38

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

    Ваша статья натолкнула меня на интересный вопрос: а есть ли авторы, пишущие регулярно, но только хиты?

    Я тут поднял свои бумажки, посидел с калькулятором БЗ-18М и прикинул.

    Если считать за отсечку хитовости уровень +30 (минимум, с которого начинают платить ППА), то абсолютным лидером с большим отрывом является @Erwinmalс 210 статьями, каждая из которых выше +30.
    Дальше идёт @Guren302 c 48 такими статьями,
    затем @elcoyot c 30 такими статьями.

    Если же за отсечку брать +50, то лидером является @BootSectorс 13 статьями.
    Дальше идут @nemirnyatom и @snipsnap.
    Причём второй пишет про локаторы и РЭБ эпохи Холодной войны, а третий про релокацию в Германию. Чем дальше исследую Хабр, тем больше думаю, что он носит маски, которые не следует приподнимать :))

    Добавлю это небольшое исследование в свой список интересных статистических фактов о Хабре.