Scrapy Python: масштабований парсинг з пайплайнами та мідлварами

Реалізація парсингу через Scrapy (Python)

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

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

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

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

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1249
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1000

Реалізація парсингу через Scrapy (Python)

Є задача зібрати 100 000 сторінок товарів за добу. Requests + BeautifulSoup справляються за тиждень, і то з перервами. Scrapy вирішує її за день — це промисловий фреймворк для веб-скрапінгу на Python. На відміну від саморобних рішень, Scrapy дає вбудовану чергу запитів, middleware-систему, pipeline для обробки даних, підтримку robots.txt, авторотацію user-agent та кешування. Наша команда використовує його в продакшені понад 5 років і реалізувала понад 30 проєктів парсингу для інтернет-магазинів, агрегаторів та маркетплейсів. Ми гарантуємо стабільний збір даних навіть при складних захистах — досвід показує, що 95% сесій проходять без помилок.

Чому Scrapy кращий за готові парсери-агрегатори?

Готові сервіси на кшталт Octoparse або Parsehub гарні для разових задач, але при промислових обсягах упираються в обмеження: ліміт на кількість сторінок, закритий код, неможливість тонкого налаштування. Scrapy дає повний контроль: ви самі вирішуєте, як обробляти капчу, як часто міняти проксі, як зберігати дані. В одному з проєктів ми збільшили швидкість збору в 4 рази, замінивши саморобний скрипт на requests+bs4 на Scrapy з паралельними запитами. Середній інженер налаштовує павука за 2 дні, а не за тиждень — це скорочує витрати на 60%.

Архітектура Scrapy

Spider (логіка обходу) ↓ Scrapy Engine ↓ Scheduler (черга URL) ↓ Downloader (HTTP-запити) ↓ (через Downloader Middlewares) Response → Spider ↓ Items → Item Pipeline ↓ Storage (DB, CSV, JSON, S3) 

Кожен компонент замінний: можна вбудувати свою чергу (Redis через scrapy-redis), свій downloader (Playwright через scrapy-playwright) або свій pipeline. Це робить фреймворк придатним для задач будь-якої складності.

Як масштабувати Scrapy за допомогою Redis?

Для розподіленого збору на кількох серверах:

# settings.py SCHEDULER = 'scrapy_redis.scheduler.Scheduler' DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' REDIS_URL = 'redis://redis:6379' SCHEDULER_PERSIST = True # черга не скидається при перезапуску 

З scrapy-redis кілька воркерів читають із загальної Redis-черги — горизонтальне масштабування без змін коду spider. Це дозволяє обробляти мільйони URL за добу.

Чому варто налаштувати middleware для обходу захисту?

class RotateUserAgentMiddleware: agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...', ] def process_request(self, request, spider): request.headers['User-Agent'] = random.choice(self.agents) 

Додатково підключаємо scrapy-rotating-proxies для автоматичної ротації проксі з відстеженням статусу кожного адреса. У складних сценаріях використовуємо scrapy-playwright з headless-браузером — це дає 95% успішних запитів навіть під Cloudflare. Один клієнт після впровадження такої схеми скоротив час збору на 70%.

Pipeline для PostgreSQL

class PostgreSQLPipeline: def open_spider(self, spider): self.conn = psycopg2.connect(DATABASE_URL) self.cur = self.conn.cursor() def process_item(self, item, spider): self.cur.execute( 'INSERT INTO products (title, price, url) VALUES (%s, %s, %s) ' 'ON CONFLICT (url) DO UPDATE SET price = EXCLUDED.price', (item['title'], item['price'], item['url']) ) self.conn.commit() return item 

ON CONFLICT DO UPDATE вирішує дедуплікацію на рівні БД без додаткових перевірок у коді. В одному з проєктів це скоротило обсяг збережених даних на 30%.

Моніторинг і статистика

Scrapy пише детальну статистику кожного запуску: кількість запитів, оброблених елементів, помилок, середній час відповіді. Через scrapy-prometheus ці метрики експортуються в Prometheus і візуалізуються в Grafana. Ми додаємо алерти на падіння швидкості збору або зростання кількості помилок — так ви завжди будете знати про проблеми.

Приклад із практики: парсинг каталогу на 200 000 товарів

Надійшла задача зібрати дані з інтернет-магазину, захищеного Cloudflare. Використали scrapy-playwright з headless-браузером і ротацією проксі. Павук обробляв 50 сторінок на хвилину, помилок — менше 1%. Інтеграція з PostgreSQL через пайплайн з ON CONFLICT дозволила оновлювати ціни без дублювання. Весь проєкт зайняв 8 днів, включаючи налаштування моніторингу в Grafana. Замовник отримав готову систему з можливістю додавання нових джерел без переписування коду.

Що входить у розробку парсера на Scrapy?

  • Проектування архітектури павуків під ваші джерела даних
  • Налаштування middleware: ротація проксі, User-Agent, cookies
  • Реалізація пайплайнів для очищення, валідації та збереження даних
  • Інтеграція з вашою БД або хмарним сховищем
  • Підготовка моніторингу (Grafana, алерти)
  • Документація щодо запуску та підтримки
  • Навчання вашого розробника роботі з системою

Порівняння Scrapy з іншими підходами

Характеристика Scrapy Requests + BeautifulSoup Octoparse
Швидкість збору (стор./хв) 200+ 30–50 100–150
Масштабованість до десятків машин Так Ні Обмежено
Налаштування проксі та User-Agent Вбудована Ручна Частково
Можливість обходу Cloudflare Через Playwright Складно Вбудовано
Ліцензія Open source Open source Пропрієтарна
Контроль над кодом Повний Повний Закритий

Терміни

Тип роботи Термін
Простий spider для 1 сайту 3–5 днів
Spider з інтеграцією в базу та моніторинг 7–10 днів
Розподілена система (Redis + кілька джерел) 10–15 днів
Складний проєкт з обходом захисту та капчею від 2 тижнів

Зв'яжіться з нами

Отримайте консультацію щодо вашого проєкту парсингу. Ми оцінимо задачу за 1 робочий день і запропонуємо оптимальне рішення. Замовте розробку — обговоримо деталі.