Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Парсер цен большого сайта?
Форумы портала PHP.SU » » Работа с сетью » Парсер цен большого сайта?

Страниц (1): [1]
 

1. Koc - 06 Апреля, 2018 - 22:42:07 - перейти к сообщению
Доброго времени,

Нужно переодически парсить цены на сайте поставщика, написал простой код (добавил его ниже).

Запускаю на обычном хостинге, все работает нормально, НО есть небольшая проблема, если в файле больше 500 товаров, то скрипт уходит в 504 ошибку. Я так понимаю не хватает ресурсов хостинга (точнее времени выполнения скрипта), а там товаров более 5000. Приходится запускать по несколько раз скрипт руками, чтобы спарсить все.

Вопрос: Есть какие-то решения, чтобы запустить скрипт один раз и пусть он там потихоньку парсит все цены сразу?

Я уже думал на хостинге настроить cron, который будет каждые 10 сек в течении 5 минут запускать мои парсер, а в сам скрипт добавить сохранение позиции на которой остановились прошлый раз и при новом запуке начинать уже с нее. Но может есть какие-то другие решения?

Заранее спасибо за помощь!

PHP:
скопировать код в буфер обмена
  1.  
  2. $csv = fopen('price.csv', 'r'); // Файл в котором хранятся названия и артикул товаров
  3. while (($row = fgetcsv($csv, 1000, ';')) !== FALSE) {
  4.     $html = file_get_contents('http://site.ru/catalog/'.$row[1]);
  5.     preg_match('|<div class="price">(.*?)</div>|i', $html, $price);
  6.     if($price[1]){
  7.         // Тут код обработки новой цены
  8.     }
  9. }
  10. fclose($csv);
  11.  
2. Строитель - 07 Апреля, 2018 - 22:35:19 - перейти к сообщению
Koc пишет:
Есть какие-то решения, чтобы запустить скрипт один раз и пусть он там потихоньку парсит все цены сразу?
Можно к примеру передавать GET-параметры, и на их основе обрабатывать массив. Скопируйте и запустите код из примера ниже, и обратите внимание на адресную строку браузера после запуска скрипта:
Спойлер (Отобразить)
Вы можете передать на вход этого скрипта одномерный массив с любым количеством элементов - он будет выполняться до тех пор, пока не обойдёт весь массив. При этом скрипт не упрётся ни во время выполнения, ни в память.
3. Koc - 09 Апреля, 2018 - 17:07:19 - перейти к сообщению
Строитель пишет:
Можно к примеру передавать GET-параметры, и на их основе обрабатывать массив. Скопируйте и запустите код из примера ниже, и обратите внимание на адресную строку браузера после запуска скрипта


Спасибо, хорошее решение, все работает.

 

Powered by ExBB FM 1.0 RC1