Задать вопрос
@ishimskayamahorka14

Как спарсить сайт через 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 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 3
dyuriev
@dyuriev
A posteriori
прежде чем парсить какой то сайт, для начала убедитесь, а нет ли у него API

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

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

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

Похожие вопросы
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект
22 дек. 2024, в 19:47
3000 руб./за проект