Введение в Scrapy
Scrapy — это асинхронный фреймворк на Python для веб-скрейпинга, предназначенный для масштабируемого сбора данных с сайтов. Он позволяет автоматически переходить по ссылкам, извлекать структурированные данные, обрабатывать формы, взаимодействовать с API и сохранять результаты в различных форматах. Scrapy активно используется в проектах анализа данных, мониторинга цен, парсинга новостей, научных исследований и автоматизации сбора информации.
Основные возможности и преимущества
-
Асинхронная архитектура на базе Twisted
-
Поддержка CSS и XPath селекторов
-
Высокая производительность и масштабируемость
-
Гибкая настройка middleware, headers, proxy
-
Интеграция с API, JSON, XML
-
Сохранение в JSON, CSV, базу данных
-
Расширение через плагины и модули
Установка и создание проекта Scrapy
Установка Scrapy:
Создание проекта:
Структура проекта Scrapy
-
spiders/
— пауки -
items.py
— структуры для данных -
pipelines.py
— обработка результатов -
settings.py
— настройки проекта
Создание паука (Spider)
Запуск:
Навигация и переход по ссылкам
response.follow()
автоматически добавляет базовый URL.
Извлечение данных с помощью XPath и CSS
CSS селекторы:
XPath селекторы:
Получение всех значений:
Обработка и сохранение результатов
Сохранение в файл:
Поддержка форматов: JSON, CSV, XML, JL (JSON Lines)
Использование Item и ItemLoader
В spider.py
:
С ItemLoader:
Работа с Middleware и User-Agent
Настройка User-Agent:
Custom middleware:
Параллельность и ограничения скорости
Ограничение скорости:
Поддержка AutoThrottle
:
Аутентификация и обработка форм
Работа с API и JSON
Извлечение JSON:
Запрос к API:
Запуск, логирование и отладка
Запуск с логом:
Просмотр ответа:
Развёртывание Scrapy на сервере
Варианты:
-
Scrapy Cloud — облачное развёртывание от Scrapinghub
-
Docker — контейнеризация Scrapy
-
cron + логика запуска скриптов — автоматизация
Расширение Scrapy: Splash, Selenium, ScrapyRT
-
Scrapy-Splash — парсинг JavaScript-страниц
-
Scrapy-Selenium — интеграция с Selenium WebDriver
-
ScrapyRT — запуск пауков через HTTP API
Примеры практического применения
-
Сбор цен и характеристик товаров
-
Мониторинг новостей и обновлений
-
Извлечение данных для машинного обучения
-
Сбор данных из бирж и финансовых сервисов
-
Парсинг вакансий и предложений на сайтах
Часто задаваемые вопросы
Что такое Scrapy?
Фреймворк на Python для высокопроизводительного сбора данных с веб-сайтов (веб-скрейпинга).
Поддерживает ли Scrapy JavaScript?
Нет напрямую. Для JavaScript-контента используется Scrapy-Splash или Selenium.
Можно ли сохранять данные в базу данных?
Да, через pipelines или внешние библиотеки (например, SQLAlchemy, MongoDB).
Как ограничить скорость запросов?
Через DOWNLOAD_DELAY
, CONCURRENT_REQUESTS
и AUTOTHROTTLE
.
Подходит ли Scrapy для API?
Да, поддерживает JSON, REST, XML.
Полный справочник по ключевым функциям и структуре библиотеки Scrapy
для Python
Установка
Создание нового проекта:
Создание нового паука (spider):
Структура Scrapy-проекта
Файл / Папка | Назначение |
---|---|
spiders/ |
Папки с пауками (основная логика парсинга). |
items.py |
Определение структуры данных (аналог схемы). |
pipelines.py |
Постобработка и сохранение данных. |
middlewares.py |
Обработка запросов/ответов (например, User-Agent). |
settings.py |
Настройки проекта (timeouts, user-agent, экспорт и др.). |
scrapy.cfg |
Конфигурация проекта. |
Основы: создание паука
Основные методы response
Метод | Описание |
---|---|
response.css(selector) |
Поиск через CSS-селекторы. |
response.xpath(xpath) |
Поиск через XPath. |
.get() |
Возвращает первое значение. |
.getall() |
Возвращает список всех найденных значений. |
.attrib |
Доступ к атрибутам HTML-тега. |
response.url , response.status , response.body |
URL, статус, содержимое. |
Извлечение данных
Следование по ссылкам
Items (структура данных)
Использование:
Pipelines (сохранение и обработка)
Активация в settings.py
:
Запуск паука
Экспорт результата:
Обход robots.txt
Отключение: