Как ускорить работу парсера?

188
13 февраля 2018, 09:00

Делаю парсер, которые должен слить более 10к товаров. При каждом выполнение скрипта проходит по 20 следующим товаром.

Для парсинга использую cURL (получаю HTML код), и Simple HTML Dom Parser (выборка нужных блоков).

Парсер построен так: cURL'ом получаю HTML код страницы каталога с товаром, передаю разметку в HTML Dom Parser:

 $html = str_get_html($html_code);
 $srt_links = $html->find('.block');

Тут приходит 20 блоков, поэтому использую:

foreach ($srt_links as & $value) {
}

чтобы работать со всеми 20-тью блоками.

После идет парсинг каждого товара, то есть получает код 20-ти страниц:

foreach ($srt_links as & $value) { 
    $product = curl($value->href);
    $product_code = str_get_html($product);
    //и тут передаю HTML код страницы товара в Simple HTML Dom Parser чтобы делать выборку по блокам нужной информации.
}

Таким образом получается что парсер переходит и получает сразу HTML код 21 страницы (1 каталог товара + 20 страниц самх товаров). Парсер выполняется около 15 секунд, что очень долго.

Что я делаю не правильно? Как можно ускорить работу парсера?

Answer 1

В вашей программе, как я понимаю, все время уходит на последовательные запросы к ресурсу, а на сам парсинг уходит лишь малая часть времени. Поэтому надо смотреть в сторону распараллеливания.

Попробуйте переделать свой код под multicurl,тогда запросы будут выполняться быстрее. Ссылка на гитхаб - тыц

READ ALSO
Получение только связанных данных MySQL

Получение только связанных данных MySQL

Одна база используется сразу же несколькими сайтамиВ таблице sites есть список всех авторизованных сайтов, которые имеют доступ к базе, у каждого...

219
Не пойму почему не работает спарсенный код?

Не пойму почему не работает спарсенный код?

Получаю содержимое тега head при помощи кода

183
обработка результата запроса

обработка результата запроса

Через Curl нужно получить весь запросТо есть аккуратный массив/объект со всеми именами-значениями заголовков и отдельно тело

166
Как передать массив по ссылке? PHP

Как передать массив по ссылке? PHP

Подскажите, пожалуйста как передать массив php по ссылке? Итак, есть массив:

161