Встречается на собеседованиях • сегодня

Как напишешь system design для веб-краулера

Веб-краулер должен быть масштабируемым, отказоустойчивым и вежливым (учитывать robots.txt). Основные компоненты:

  1. URL Frontier - очередь приоритетов для обработки URL (FIFO + доменный throttle)
  2. Downloader - многопоточный загрузчик с кешированием и задержками между запросами
  3. Parser - извлечение ссылок и контента (BeautifulSoup/lxml)
  4. Deduplication - Bloom filter или хеш-таблица для уникальности URL
  5. Storage - распределённая БД (Cassandra/S3) для сырых данных и индексов

Пример базовой архитектуры на Python:

python
from queue import Queue
import requests
from bs4 import BeautifulSoup

class Crawler:
    def __init__(self):
        self.url_queue = Queue()
        self.visited = set()

    def crawl(self, start_url):
        self.url_queue.put(start_url)
        while not self.url_queue.empty():
            url = self.url_queue.get()
            if url not in self.visited:
                try:
                    response = requests.get(url)
                    soup = BeautifulSoup(response.text, 'lxml')
                    # Process content...
                    for link in soup.find_all('a'):
                        self.url_queue.put(link.get('href'))
                except Exception as e:
                    print(f"Error crawling {url}: {e}")
                self.visited.add(url)

Критические аспекты: политика обхода, обработка JavaScript (Selenium/Playwright), распределённая координация (Celery/Kafka), обход капчи.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы