Как парсить большое количество сайтов?

У меня есть массив с 4000 элементами. У каждого элемента есть ссылка на сайт донер. Каждый элемент и ссылка уникальные.
Далее есть код-обработчик, который берет по этой ссылке нужные мне поля с сайта и создает из них массив, который впоследствии разбирается и элемент в системе обновляется (свойства, файлы, цены, текст).

Если это делать для одного элемента - ок, для 20 - ок, а для 4000 элементов - мне кажется уже затратно?
Посоветуйте, как не упереться в лимиты хоста?

Могу ли я создать форму ajax, которая ждет выполнения обработки одного элемента и по завершению отправляет следующий? сильно ли такое жрет памяти?
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Помещаете свой массив с 4000 элементами в таблицу базы данных.
Добавляете еще несколько атрибутов для записи таблицы:
1. статус обработки парсинга, значения: 1 - добавлен в очередь на обработку, 2 - в обработке, 3 - обработка завершена.
2. Дата и время изменения статуса обработки.
Теперь ваш скрипт должен взять запросом из таблицы базы одну запись (один сайт) со статусом 1 (или со статусами 2 или 3, с разницей времени больше периода повторной обработки парсинга) и перевести в статус 2 и начать обработку. По окончании обработки выставить статус 3. При смене статуса обновлять его время изменения.
Анализировать статус и переводить его в статус 2 нужно одной транзакцией, а в статус 3 - другой транзакцией.
Если время выполнения персинга с момента старта скрипта небольшое (определяете предельное время работы одного потока и с ним сравниваете), то можно взять следующую запись в работу.

Все, теперь вы написали простетский планировщик задач и можете параллельно запустить несколько скриптов через браузер или через cron на сервере. Каждый поток выполнения скрипта запросом в базу будет брать задачи, поставленные в обработку, либо перезапускать давно не запускавшиеся задачи, либо перезапускать зависшие в обработке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы