Пауки Scrapy
Рассмотрим парсинг сайтов с использованием Scrapy. Применение такой технологии позволит, например, эффективно находить негативные отзывы клиентов.
Анализ и работа с зонами роста как в уровне сервиса, так и в качестве продуктов повышает лояльность клиентов, а значит, прибыль компании. Вот только как узнать, что именно требует модернизации? Клиенты редко оставляют жалобы напрямую.
Однако в современном мире существуют форумы, сайты, социальные сети. Это действительно огромное количество информации, причем в открытом доступе. Но ее сбор и систематизация требует гигантских временных затрат и ресурсов.
Предлагаем рассмотреть хороший инструмент для автоматизированного сбора негативных отзывов клиентов.
Scrapy — мощный фреймворк, основным принципом которого является гибкая настройка парсеров (пауков, crawlers). Главными особенностями данного фреймворка являются:
- Запуск всех парсеров в разных процессах (по умолчанию = 16).
- Автоматическое отслеживание нагрузки на сервер сайта — если в процессе парсинга увеличивается временной интервал между запросом и ответом, то Scrapy для данного паука увеличивает задержку между запросами (delay) до тех пор, пока сервер не будет разгружен и не будет отвечать с ожидаемой задержкой (выставляется в настройках, по умолчанию — 3 секунды).
- Отслеживание переходов по ссылкам для предотвращения повторных запросов.
- Удобная структура проекта выделяет слои middleware, pipeline и spider, позволяя гибко добавлять парсеры для различных сайтов и не нарушать принципы DRY.
- Легко встраивается в такие популярные фреймворки как – Flask, Django. Также разработан специальный фреймворк, выступающий в роли daemon по циклическому запуску парсеров с множеством настроек расписаний – Scrapyd.
Структура проекта выглядит следующим образом:
Перед вами пример парсера, осуществляющий разбор страницы для поиска и сохранения в базе данных информации о сообщении:
Работа парсера начинается с вызова метода «parse», с передачей единственного параметра response, который содержит структурированный экземпляр страницы.
В процессе разбора страницы можно выделить два основных метода:
- response.css(<tag>) — выполняет поиск указанного тега или последовательности вложенности тегов с параметрами.
- response.follow(,) — выполняет загрузку следующей страницы, разобранную структуру которого передает в качестве параметра функции «parse»..
Данный рекурсивный процесс выполняется до тех пор, пока функция «parse» не вернет пустую структуру данных (или пустой словарь). Для парсеров, запускаемых на регулярной основе необходимо предусмотреть условие прерывания.
В данном примере используется ограничение по достижении определенной даты поста. Команда для запуска парсера будет выглядеть следующим образом:
Код сохранения полученных данных со страниц следует выносить в pipeline.py, а именно в класс ParserPipeline(object).
Каждый вызов «yield response.follow(f»{post_link}/», self.parse_post)» парсера передает результаты обратным вызовом функции ParserPipeline.process_item, внутри которой следует описывать работу с сохранением данных.
Подключение к БД следует описывать в ParserPipeline.from_crawler, который вызывается при создании экземпляра класса фреймворком Scrapy.
Отметим также, что если использовать Docker-контейнер, то полученную систему можно быстро и легко развернуть на любой машине.
Подробнее ознакомиться с классами фреймворка можно из официальной документации проекта Scrapy.
Для того, чтобы оставаться лидерами на рынке, компаниям чрезвычайно важно постоянно совершенствоваться, создавать качественный клиентский сервис. Использование подобных решений позволит существенно сэкономить ценные ресурсы и в кратчайшие сроки выявить свои зоны развития.