Розробка краулера сайту для індексації внутрішнього контенту

Коли сайт розростається до тисяч сторінок, ручний обхід перестає справлятися: биті посилання, дублі та зміни структури вислизають від уваги. Ми розробляємо внутрішні краулери, які автоматизують індексацію контенту та пошук по сайту, адаптуючись під вашу архітектуру. Наша команда реалізує проєкт під ключ — від аудиту до впровадження та подальшої підтримки, забезпечуючи надійне рішення, яке масштабується разом із бізнесом.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Розробка краулера сайту для індексації внутрішнього контенту
Середній
~3-5 днів
Часті запитання

При зростанні сайту до тисяч сторінок ручний обхід перестає працювати. Без автоматизації неможливо відстежити биті посилання, дублі метаданих або зміни структури. Внутрішній краулер вирішує це завдання за лічені години. Ми розробляємо кастомні рішення під ключ — з урахуванням вашої архітектури та вимог до індексації.

Автоматизація пошуку по сайту — не просто економія часу. Це можливість будувати повноцінний пошуковий індекс, який покращує UX і допомагає в SEO-аудиті. Кастомний краулер на порядок продуктивніший за готові інструменти. Наприклад, асинхронний обхід на Python обробляє до 50 сторінок за секунду, тоді як Screaming Frog — максимум 10. Це дозволяє індексувати 100 000 сторінок за годину без перевантаження сервера. Економія бюджету на ручному аудиті окупається за місяць.

Як працює внутрішній краулер?

Краулер виконує асинхронний обхід за алгоритмом BFS: починає з головної сторінки, витягує всі внутрішні посилання, рекурсивно обходить їх до заданої глибини або ліміту. Кожен HTTP-запит обробляється в asyncio з контрольованим паралелізмом — це дозволяє без перевантаження сервера обробляти десятки сторінок за секунду. Помилки (таймаути, 404, редиректи) логуються і не переривають процес.

Компонент Опис
Асинхронний двигун httpx + asyncio, до 50 concurrent-воркерів
Парсер BeautifulSoup / lxml для HTML, Playwright для SPA
Фільтрація robots.txt, exclude-патерни, обмеження за глибиною
Сховище PostgreSQL tsvector, Elasticsearch, Meilisearch (на вибір)

Чому варто замовити розробку в нас?

Ми розробляємо краулери вже багато років — успішно завершили 30+ проєктів для інтернет-магазинів, агрегаторів та корпоративних порталів. Кожен краулер проходить навантажувальне тестування: гарантуємо обробку 10 000 сторінок за 5 хвилин при адекватних налаштуваннях. Надаємо повну документацію, навчання команди та техпідтримку після деплою. Окупність інвестицій — менше кварталу.

Порівняння: кастомний краулер vs готові інструменти

Готові сервіси (Screaming Frog, Sitebulb) обмежені обсягом і гнучкістю. Кастомний краулер:

  • Не має ліміту на кількість сторінок.
  • Підтримує динамічний контент (SPA, нескінченна стрічка).
  • Інтегрується з вашою інфраструктурою (CI/CD, бази даних).
  • Збирає довільні дані (атрибути, мікророзмітка).

За швидкістю кастомне рішення на Python з httpx у 5 разів швидше за аналогічні інструменти на Java. Це особливо помітно при обході сайтів з більш ніж 50 000 сторінок.

Докладніше про продуктивність

При обході 200 000 сторінок кастомний краулер з асинхронною архітектурою завершує роботу за 2 години, тоді як Screaming Frog витрачає більше 10 годин. Досягається це за рахунок конвеєрної обробки та мінімізації накладних витрат на створення HTTP-сесій.

Як уникнути типових помилок при розробці краулера?

Найчастіші проблеми: ігнорування robots.txt веде до блокування; відсутність обробки пагінації та нескінченної стрічки; занадто швидкий обхід провокує блокування сервером; немає дедуплікації URL з різними параметрами. Ми враховуємо кожну з цих проблем на етапі архітектури. Наприклад, в одному з проєктів для агрегатора з 200 000 сторінок правильне налаштування Crawl-Delay та дедуплікація скоротили час обходу на 40%.

Як адаптувати краулер під свій сайт?

  1. Проаналізуйте структуру — визначте типи сторінок, пагінацію, динамічні елементи.
  2. Налаштуйте політику ввічливості — задайте затримки між запитами, виключіть службові розділи.
  3. Виберіть сховище — PostgreSQL tsvector для невеликих сайтів, Elasticsearch для високонавантажених систем.
  4. Протестуйте на вибірці — запустіть обхід 1000 сторінок, перевірте коректність даних.
  5. Запустіть повний обхід — з моніторингом помилок та автоматичним сповіщенням.

Реалізація

Приклад асинхронного краулера на Python з використанням httpx та BeautifulSoup:

import asyncio
import httpx
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
from collections import defaultdict

class SiteCrawler:
    def __init__(self, base_url: str, max_pages: int = 10000):
        self.base_url = base_url
        self.base_domain = urlparse(base_url).netloc
        self.max_pages = max_pages
        self.visited = set()
        self.queue = asyncio.Queue()
        self.results = []

    async def crawl(self) -> list:
        await self.queue.put(self.base_url)
        async with httpx.AsyncClient(follow_redirects=True, timeout=15) as client:
            workers = [asyncio.create_task(self._worker(client)) for _ in range(5)]
            await self.queue.join()
            for w in workers:
                w.cancel()
        return self.results

    async def _worker(self, client: httpx.AsyncClient):
        while True:
            url = await self.queue.get()
            try:
                if url in self.visited or len(self.visited) >= self.max_pages:
                    continue
                self.visited.add(url)
                resp = await client.get(url)
                page_data = self._parse_page(url, resp)
                self.results.append(page_data)
                if resp.status_code == 200 and 'text/html' in resp.headers.get('content-type', ''):
                    for link in page_data['internal_links']:
                        if link not in self.visited:
                            await self.queue.put(link)
            finally:
                self.queue.task_done()

    def _parse_page(self, url: str, resp: httpx.Response) -> dict:
        soup = BeautifulSoup(resp.text, 'lxml') if resp.status_code == 200 else None
        result = {
            'url': url,
            'status': resp.status_code,
            'title': soup.select_one('title')&.get_text(strip=True) if soup else None,
            'h1': soup.select_one('h1')?.get_text(strip=True) if soup else None,
            'canonical': soup.select_one('link[rel=canonical]')?.get('href') if soup else None,
        }
        if soup:
            result['internal_links'] = [
                urljoin(url, a['href']) for a in soup.find_all('a', href=True)
                if urlparse(urljoin(url, a['href'])).netloc == self.base_domain
            ]
        return result

Збереження в індекс пошуку

Після обходу дані індексуються в одну з систем. Порівняння варіантів:

Система Швидкість індексації Типовий сценарій
PostgreSQL tsvector ~10 000 док/сек Пошук по сайту до 100K сторінок
Elasticsearch ~50 000 док/сек Мультисайт, складні запити
Meilisearch ~30 000 док/сек Швидкий старт, self-hosted

Що входить в роботу

  • Архітектура краулера під вашу CMS / фреймворк.
  • Вихідний код з CI/CD та Docker-образом.
  • Інструкція з розгортання та налаштування.
  • Навчання команди (2 години онлайн).
  • Гарантія на код 6 місяців.

Терміни та вартість

Базовий краулер з індексацією в PostgreSQL — від 3 до 5 робочих днів. Вартість розраховується індивідуально після аналізу структури сайту. Зв'яжіться з нами — оцінимо проєкт.

Економія бюджету при такому підході може досягати сотень тисяч гривень на рік за рахунок відмови від ручного аудиту та готових підписок. Отримайте консультацію по вашому проєкту вже сьогодні.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060