Преложенные выше серверы очередей хорошо, но есть минус. Для данной задача оно избыточно. Как минимум придется раскуриться настройкой сервера и как с ним взаимодействовать.
Предложенная схема с базой неплохая, но в ней потенциально заложена повторная проверка если п.2 запускается в несколько копий. Поэтому более правильный вариант это использовать Redis. У меня так:
Как сделать «фоновый» парсинг?
Т.е. смысл в том, что бы очередь url на загрузку формировалась в однопоточном режиме, а сами закачки многопоточны. Тогда скрипт качающий страницы может быть запушен в стольких копиях, сколько у вас потянет сервер и не нужно будет боятся повторной загрузки (у меня каждую минуту запускается новая копия скрипта и так до тех пор, пока очередь не станет пустой). Схема крайне легко маштабируется как в рамках одного сервера, так и нескольких.