Scrapy парсинг: когда фреймворк лучше скрипта

Scrapy — Python-фреймворк для масштабного парсинга: очереди, ретраи, пайплайны. Разбираем, когда он нужен и когда хватит Beautiful Soup или Playwright.

← Все статьи

scrapy парсинг

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

scrapy парсинг

Кратко

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

Инфографика: очередь 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+ URLScheduler + 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 подходит

  1. Нужен обход графа: список → карточки → связанные разделы.
  2. Объём от тысяч URL и/или регулярный пересбор данных.
  3. Важны единые настройки: delay, concurrent requests, retries, логи.
  4. Данные должны стабильно уходить в хранилище через pipelines.
  5. Команда готова поддерживать Python-проект, а не только no-code кабинет.

Сравнение с соседними инструментами

КритерийScrapyBeautiful SoupPlaywright
РольОркестрация краулаПарсинг уже полученного HTMLБраузерный рендер и клики
JS-сайтыСлабо без доработокНет (только HTML)Сильная сторона
МасштабВысокийНизкий–среднийСредний (дороже по CPU)
Кривая обученияВышеНизкаяСредняя
Типичный стекPython projectrequests + bs4Python/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.