Scrapy парсинг — это не «ещё одна библиотека для CSS-селекторов», а фреймворк краулинга на Python: очередь URL, параллельные запросы, middleware, item pipelines и экспорт в JSON/CSV/БД. Его берут, когда парсинг становится системой (тысячи страниц, расписание, ретраи), а не разовым скриптом. Для статичного HTML часто хватает requests + Beautiful Soup; для JS-сайтов — Playwright. Ниже — архитектура, типовой spider, таблицы выбора и ограничения.

Кратко
- Scrapy управляет краулом: очередь, concurrency, throttle, ретраи, пайплайны данных.
- Сильная сторона — масштаб и структура проекта (spiders, items, settings).
- Из коробки Scrapy не рендерит JavaScript — для SPA нужен Playwright/Splash или перехват API.
- Для 1–50 страниц разово Scrapy обычно дороже по времени внедрения, чем простой скрипт.
- Продакшен требует политики задержек, User-Agent, уважения robots.txt и ToS цели.

Инфографика: очередь URL → параллельная загрузка → item pipeline → хранилище. Scrapy закрывает оркестрацию краула, а не только разбор HTML.
Что такое Scrapy и как устроен проект
Scrapy — open-source фреймворк для извлечения данных из веба. Типичный проект: spider описывает, какие URL брать и какие поля извлекать; pipeline нормализует и сохраняет; middleware правит запросы/ответы. Архитектура асинхронная (Twisted): один процесс обслуживает много запросов без «толпы» потоков.
На практике команда держит settings.py (delay, concurrent requests, user-agent), набор spiders и pipelines в Git. Это дисциплина, которой нет у разового скрипта: одинаковые ретраи, логи и формат item’ов на всех источниках.
Типовые задачи и сложность
| Задача | Подход в Scrapy | Сложность | Когда не подходит |
|---|---|---|---|
| Каталог → карточки | List spider + detail callback | Низкая–средняя | Контент только после JS |
| Регулярный пересбор 10k+ URL | Scheduler + pipelines + cron/worker | Средняя | Нет Python-поддержки |
| Несколько доменов | Несколько spiders / один project | Средняя | Сильно разные антибот-политики |
| SPA / личный кабинет | scrapy-playwright или API intercept | Высокая | Проще сразу Playwright/Crawlee |
Пример кода: spider список → карточка
Учебный пример на нейтральной разметке. Перед продакшеном добавьте задержки, обработку ошибок и проверку ToS источника.
import scrapy
class CatalogSpider(scrapy.Spider):
name = "catalog"
start_urls = ["https://example.com/catalog"]
custom_settings = {
"DOWNLOAD_DELAY": 1.0,
"CONCURRENT_REQUESTS_PER_DOMAIN": 4,
"ROBOTSTXT_OBEY": True,
}
def parse(self, response):
# Список карточек на витрине
for href in response.css("a.product-link::attr(href)").getall():
yield response.follow(href, callback=self.parse_item)
next_page = response.css("a.next::attr(href)").get()
if next_page:
yield response.follow(next_page, callback=self.parse)
def parse_item(self, response):
yield {
"url": response.url,
"title": response.css("h1::text").get("").strip(),
"price": response.css(".price::text").re_first(r"[\d\s]+"),
}
Когда Scrapy подходит
- Нужен обход графа: список → карточки → связанные разделы.
- Объём от тысяч URL и/или регулярный пересбор данных.
- Важны единые настройки: delay, concurrent requests, retries, логи.
- Данные должны стабильно уходить в хранилище через pipelines.
- Команда готова поддерживать Python-проект, а не только no-code кабинет.
Сравнение с соседними инструментами
| Критерий | Scrapy | Beautiful Soup | Playwright |
|---|---|---|---|
| Роль | Оркестрация краула | Парсинг уже полученного HTML | Браузерный рендер и клики |
| JS-сайты | Слабо без доработок | Нет (только HTML) | Сильная сторона |
| Масштаб | Высокий | Низкий–средний | Средний (дороже по CPU) |
| Кривая обучения | Выше | Низкая | Средняя |
| Типичный стек | Python project | requests + bs4 | Python/Node + browser |
Ошибки новичков
Частая ошибка — запускать Scrapy «на всё подряд», включая SPA, где HTML пустой. Вторая — нулевой DOWNLOAD_DELAY и блокировка IP. Третья — хранить сырой HTML в item без нормализации: потом невозможно сравнить цены и SKU. Четвёртая — игнорировать robots.txt и ToS «потому что конкуренты так делают».
Когда не подходит
Не берите Scrapy для разового сбора 20 карточек «на завтра». Не ждите, что он заменит браузер на тяжёлом SPA. Если нужен готовый облачный рантайм — смотрите Apify или Crawlee. Для кастомного контура под магазин часто выгоднее услуга парсинга.
FAQ
Scrapy — это парсер HTML?
Частично: селекторы есть, но главная ценность — управление краулом и пайплайнами. Чистый разбор фрагмента удобнее делать Beautiful Soup или lxml.
Можно ли парсить JS-сайты на Scrapy?
Да, через Playwright/Splash или перехват JSON API. Без этого виден только серверный ответ.
Scrapy легален?
Инструмент легален. Ограничения задают robots.txt, ToS, ПДн и договорённости с источником.
Нужен продакшен-парсинг: парсинг сайтов, парсинг интернет-магазина. Серия: Beautiful Soup, Playwright.
