Наткнулся на пост где человек делал подобное, ссылка:
тык
ну я бы ещё к этому функционалу подключил мультикурл + поддержку прокси (есть отличная штука под это дело
AngryCurl) на его базе я и делал свой парсер, только вместо crawler использовал
DiDom.
И ещё в своём парсере настройку для разных сайтов я закидывал в отдельный php файл, при запуске парсера я задаю параметры. Например ставлю на крон задание запускать скрипт каждую минуту такой командой:
/parser.php https://toster.ru/
первым делом проверяем в скрипте работает ли сейчас скрипт с этими параметрами, если работает то ничего не делаем. Контроль работы скрипта осуществляю лочкой файла, таким способом:
$site=$argv[1];
if(!$argv[1]) {
$site = $_GET['site'];
}
flock($lock = fopen(__DIR__.'/parser/lock_files/'.md5($site),"w"),LOCK_EX|LOCK_NB) or die('ERROR: SCRIPT RUNNING...');
Если если скрипт не работает, передаю параметр с которым запускается скрипт в инициализацию парсера, если сайт переданный в параметре есть в базе данных делаю инклуд файла с уникальными настройками парсинга данных для него, далее по сценарию.
Получается что парсер вполне универсальный, можно настроить под любые задачи, создавать сколько угодно экземпляров, регулировать нагрузку (регулированием в кроне частоту запуска скрипта того или иного экземпляра или в конфиге самого скрипта увеличить интервал переобхода страниц с момента последнего посещения её парсером).
В скрипте стоит неограниченное время выполнения, даже если скрипт упадёт, крон его практически сразу же и поднимет. Так же удобно что под каждый сайт можно в кроне задать разную частоту запуска парсера.
Не знаю на сколько эффективно я сделал контроль работы скрипта отдельного экземпляра (через лочку файла) т.к. доступа к процессам например у меня нету на шаред хостинге, нашёл решение такое, попробовал = работает = меня устраивает.. может и всплывут какие то подводные камни хз, на данный момент полёт нормальный.
Как вообще такая логика, может что то надо пересмотреть ?