Как устроен парсинг тысяч сайтов без единого бэкенд-сервера

08 сен 2026
6,702
290
33
2 дня

Недавно я разбирал архитектуру китайских открытых читалок и наткнулся на интересный проект. В китайском опенсорсе огромной популярностью пользуется Legado — легковесный Android-ридер. У самого приложения нет своей базы книг или серверов с контентом. Это чистый движок рендеринга и парсинга, который берет веб-страницы и превращает их в аккуратные электронные книги.

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

GitHub license GitHub Star GitHub Fork

В чем идея проекта

Создавать парсер под каждый отдельный сайт внутри кода мобильного приложения — тупиковый путь. Любое изменение верстки на целевом ресурсе требует релиза новой версии клиента.

Разработчики Legado пошли по другому пути. Они создали декларативный формат на базе JSON, где каждый источник данных описывается набором селекторов:

Реклама
  • как собрать поисковый запрос к сайту,
  • где в дереве DOM лежит оглавление,
  • как достать текст главы,
  • какими регулярными выражениями отрезать рекламные баннеры.

Репозиторий aoaostar/legado решает следующую задачу: он автоматически собирает такие правила от разных авторов сообщества, тестирует их валидность, объединяет в пакеты и раздает через статический сайт и GitHub Pages.

{
  "bookSourceGroup": "Web Fiction",
  "bookSourceName": "Sample Source",
  "bookSourceUrl": "https://example.com",
  "ruleSearch": {
    "bookList": ".search-result .item",
    "name": "h3.title@text",
    "author": ".author@text",
    "bookUrl": "a@href"
  },
  "ruleBookContent": {
    "content": "#chapter-content@textNodes"
  }
}

Клиент читает эту структуру и на лету вытягивает нужные узлы из HTML.

Что хранится в репозитории

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

  1. Книжные источники (Book Sources). Сборки правил для тысяч онлайн-библиотек. В репозитории есть как огромные базы на 3900+ источников, так и компактные проверенные подборки от конкретных авторов.
  2. Правила очистки текста (Purification Rules). Регулярные выражения, которые движок применяет к тексту перед выводом на экран. Они удаляют водяные знаки, призывы подписаться на соцсети и мусорную разметку.
  3. HTTP TTS движки. Готовые JSON-конфиги для подключения облачных систем синтеза речи. Ридер отправляет фрагменты текста на внешний HTTP-эндпоинт и воспроизводит полученный аудиопоток.
  4. Темы и типографика. Пресеты стилей, шрифтов и цветовых схем, повторяющие интерфейсы популярных коммерческих читалок вроде WeChat Read.

Архитектура синхронизации

Если заглянуть в README репозитория, сразу бросаются в глаза системные логи синхронизации:

XIU2精品书源: 同步成功, 共 22 条 | 更新时间: 2026-08-15
shidahuilang书源: 同步失败, Expecting value: line 5 column 1 (char 4)

Автор настроил пайплайн на базе GitHub Actions, который регулярно обходит внешние репозитории других разработчиков. Скрипт парсит чужие JSON-манифесты, проверяет синтаксис, отсеивает битые ветки и собирает итоговые файлы дистрибуции. Если в стороннем источнике упал синтаксис (например, забыли закрыть скобку в JSON), пайплайн фиксирует ошибку в README и не ломает общую сборку.

Для удобства пользователей реализована схема диплинков. Ссылки вида legado://import/bookSource?src=https://... перехватываются установленным на устройстве приложением, после чего база правил обновляется в один клик без ручного копирования ссылок.

Практическая польза для разработчиков

Этот репозиторий интересен не только тем, кто читает книги на Android. Здесь есть два крутых архитектурных паттерна:

1. Архитектура headless-клиента

Если вы проектируете RSS-агрегатор, парсер подкастов или клиент для специфических медиа-ресурсов, посмотрите, как реализована схема правил Legado. Перенос логики парсинга в JSON-манифесты полностью отвязывает клиентское приложение от изменений на сторонних сайтах.

2. Подход к курированию данных без бэкенда

Весь проект работает на бесплатной инфраструктуре: GitHub Actions для сбора и валидации, GitHub Pages и Cloudflare для раздачи статических JSON-файлов. Никаких выделенных серверов, баз данных или постоянных расходов на поддержку.

Кому стоит взглянуть

Проект пригодится разработчикам парсеров, создателям мобильных приложений для чтения контента и тем, кто настраивает себе идеальную офлайн-читалку с кастомными синтезаторами речи. Найти все конфигурации и исходный код скриптов синхронизации можно в официальном репозитории aoaostar/legado.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.