@damarkuzz

Как спарсить сайт через PHP с более 30 тыс. ссылками?

Есть сайт, на котором около 30 000 единиц товаров.
Также имеется PHP-скрипт, который парсит одну ссылку и выводит результат.
Как сделать так, чтобы скрипт спарсил около 30 000 ссылок. Их следует все вносить в массив? Но тогда это получиться огроменный файл, который будет медленнно исполняться.

// Loading page
$max_timout = 10;
$proxy = false;
$product_url = "https://www.ikea.com/ru/ru/catalog/products/303012";
$data = request($product_url, $max_timout, $proxy);

// Start parsing
$pq = phpQuery::newDocument($data['data']);

// Product title
$result['title'] = trim($pq->find('div.range-revamp-header-section__title--big')->html());

function request($url, $timeout = 10, $proxy = false)
{
	$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0";
    $headers[] = "Accept: */*";
    $headers[] = "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_PROXY, $proxy);

    $data = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    $result['httpcode'] = $httpcode;
    $result['data'] = $data;
    return $result;	
}
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 3
dyuriev
@dyuriev
A posteriori
прежде чем парсить какой то сайт, для начала убедитесь, а нет ли у него API

https://developer.inter.ikea.com/
Ответ написан
Комментировать
@zkrvndm
Софт для автоматизации
Если хотите многопоточное выполнение по частям, сначала переделайте ваш скрипт с использованием прокси. Потому что без прокси вы скорее всего очень быстро попадете в бан.
Ответ написан
Комментировать
@rPman
Варианты
- запустить 10-100 своих парсеров параллельно и подправить код чтобы они брали следующую ссылку из какой-нибудь базы данных, учитывающей транзакции многопользовательского доступа или блокировки.
- переделать парсер так же работающий в одном потоке, но использующий к примеру curl_multi, когда запросы к сайту идут асинхронно

И помним, админу сайта может не понравиться 100500 запросов к их серверу, так как это похоже на ддос.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽