Делаю парсер, которые должен слить более 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 секунд, что очень долго.
Что я делаю не правильно? Как можно ускорить работу парсера?
В вашей программе, как я понимаю, все время уходит на последовательные запросы к ресурсу, а на сам парсинг уходит лишь малая часть времени. Поэтому надо смотреть в сторону распараллеливания.
Попробуйте переделать свой код под multicurl
,тогда запросы будут выполняться быстрее. Ссылка на гитхаб - тыц
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Одна база используется сразу же несколькими сайтамиВ таблице sites есть список всех авторизованных сайтов, которые имеют доступ к базе, у каждого...
Через Curl нужно получить весь запросТо есть аккуратный массив/объект со всеми именами-значениями заголовков и отдельно тело
Подскажите, пожалуйста как передать массив php по ссылке? Итак, есть массив: