Как разделить парсинг на этапы?
504 это gateway time-out - значит перед вашим php стоит какой-то сервер который все-равно имеет таймаут и по этому таймауту останавливает выполнение.

В любом случае запускать любые скрипты парсинга через браузер - это очень плохая идея.
Зайдите через консоль и запускайте как консольный скрипт.
Вроде-бы за'loop'ить можно в цикле с использованием  ob_start() и ob_get_clean().