rollun-com / rollun-parser
Foundation for parsers
Requires
- php: ^7.2
- electrolinux/phpquery: ^0.9.6
- fzaninotto/faker: ^1.8
- guzzlehttp/guzzle: ^6.3
- rollun-com/rollun-callback: ^5.1
- rollun-com/rollun-datastore: ^6.0
- zendframework/zend-servicemanager: ^3.3
Requires (Dev)
- phpunit/phpunit: ^7
- rollun-com/rollun-logger: ^4.1||^5.0
- squizlabs/php_codesniffer: ^3.3
- symfony/dotenv: ^4.1
- zendframework/zend-config-aggregator: ^1.0
This package is auto-updated.
Last update: 2023-05-13 17:50:21 UTC
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' ] ]