Встречается на собеседованиях • сегодня
Как напишешь system design для веб-краулера
Веб-краулер должен быть масштабируемым, отказоустойчивым и вежливым (учитывать robots.txt). Основные компоненты:
- URL Frontier - очередь приоритетов для обработки URL (FIFO + доменный throttle)
- Downloader - многопоточный загрузчик с кешированием и задержками между запросами
- Parser - извлечение ссылок и контента (BeautifulSoup/lxml)
- Deduplication - Bloom filter или хеш-таблица для уникальности URL
- 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), обход капчи.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы