rollun-com / rollun-parser
Foundation for parsers
Requires
- php: ^8.0
- guzzle/guzzle: dev-php-8.0 as v3.9.0
- guzzlehttp/guzzle: ^6.5.8
- laminas/laminas-servicemanager: ^3.10
- rollun-com/rollun-callback: ^7.0
- rollun-com/rollun-datastore: ^9.0.3|^10.0
- rollun-com/rollun-dic: ^4.0
- rollun-com/rollun-utils: ^7.1.4|^8.0
Requires (Dev)
- laminas/laminas-config-aggregator: ^1.7
- phpunit/phpunit: ^9.5
- symfony/dotenv: ^6.0.3
README
rollun-parser
- библиотека, которая предоставляет базовые возможности для написание парсинга сайтов.
На основе какркаса данной библиотеки можно пострить вполне ефективную систему парсинга.
Схема каркаса:
Основные компоненты:
Task source
- это модуль системы парсинга с которого все начинается. Задача этого модуля поставить в очередь для загрузчика всю информацию, которая может быть понадобиться для того чтобы загрузить и обработать страницу. Зачастую это будут объекты, которые после парсинга некой страницы хотят узнать больше информации о объекте парсинга.Task queue
- это очередь, которая передает сообщения отTask source
кLoader
Worker manager
- это объект, который управляет процессами, запущенными под руководством этим же объектом.Process
- подробнее тут, єто единица управления дляWorker manager
. Если процессу указать максимальное время жизни, то процессом будет теперь заботитьсяPid killer
и убьет процесс с истечением указаного времени.Worker
- это объект, который берет сообщение с очередиTask queue
и запускаетLoader
с данными из очереди. Немаловажный факт: если попытка загрузки страницы потерпела неудачи -Worker
не будет удалять сообщение из очереди, таким образом, оно появиться через некоторое время (time-in-flight
) снова в очереди и буде отправлено на обработкуLoader
снова. Если загрузка прошла успешно - сообщение будет удалено из очереди. В системеWorker
есть частьюProcess
и поэтому можно настраивать вWorker manager
какое макчимальное количество воркеров может работать одновременно.Loader
- загружает страницу з сайта и валидирует ее с помощью указанных валидаторов. Если страница валидна, то она буде записана вDocument storage
, а информация о ней записана в очередьDocument queue
для подальшего парсинга.Parser
- подсистемаWorker manager
->Process
->Worker
->Parser
работает аналогично сWorker manager
->Process
->Worker
->Loader
.Parser
после успешного парсинга страницы запишет данные в указанное хранилищеParser Result Storage
.Proxy manager
- подсистема которая управляет выдачей прокси. Прокси выдаются всегда случайные, но частота зависит от того насколько у прокси хорошая оценка и как давно он не был использован. Клиент который работает с прокси (в нашем случае этоLoader
) должен вернуть фидбек про прокси (поставить эму оценку от 1 до 10).Proxy manager
гарантирует что у него всегда найдутся для тебя свеженькие прокси.Parser Result Storage
- как уже было выше сказано, это хранилище, кудаParser
сохраняет данные после парсинга.
Загрузчики
Библиотека предусматривает несколько базовых объектов для использования. Одним из таких есть AbstractLoader
. Этот объект
предназначен для того чтобы загружать страницы з сайта, валидировать их, сохранять документы в персистентном хранилище
(в данном случае это файл) и записывать задание на парсинг в очередь. Для того чтобы написать свои загрузчики отнаследуйтесь
от этого объекта и реализуйте/переопределите методы если это требуется. В очередь передается сообщение в виде массива.
Под ключом filepath
в этом массиве будет имя файла, где сохранился скачанный документ.
Парсера
Подобным объектом для парсинга есть AbstractParser
. Обязаности этого объекта это распарсить файл, путь к которому указан
в массиве (сообщение из очереди документов) и сохранить результат в соответствующие хранилище.
TaskResource
TaskResource
- этот объект наследует QueueFiller
из библиотеки
rollun-com/rollun-callback. Его задача взять нужные конфиги и создать
объект ServerRequestInterface
, который будет описывать запрос для загрузчика.
Пример конфигов:
[ [ 'uri' => 'site://example.com', 'method' => 'POST' // optional, default - 'GET' ] ]