PHP cURL установка задержки после 10 запросов
Я использую PHP и cURL, чтобы очистить HTML-страницы одного сайта. Экспериментально я обнаружил, что мой код работает, только когда я указываю 10 URL или меньше в $nodes array
(см. пример кода). Мне нужно очистить около 100 страниц одновременно и сохранить исходный код в файл. Можно ли это сделать с помощью одной из встроенных функций cURLS?
Вот код, который я использую в данный момент:
function getHTML(){
$nodes = array(
'http://www.example.com/page1.html',
'http://www.example.com/page2.html',
'http://www.example.com/page3.html',
'http://www.example.com/page4.html',
'http://www.example.com/page5.html',
'http://www.example.com/page6.html',
'http://www.example.com/page7.html',
'http://www.example.com/page8.html',
'http://www.example.com/page9.html',
'http://www.example.com/page10.html',
'http://www.example.com/page11.html',
'http://www.example.com/page12.html',
'http://www.example.com/page13.html',
'http://www.example.com/page14.html',
'http://www.example.com/page15.html',
'http://www.example.com/page16.html',
'http://www.example.com/page17.html',
'http://www.example.com/page18.html',
'http://www.example.com/page19.html',
'http://www.example.com/page20.html' ...and so on...
);
$node_count = count($nodes);
$curl_arr = array();
$master = curl_multi_init();
for($i = 0; $i < $node_count; $i++)
{
$url =$nodes[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($master, $curl_arr[$i]);
}
do {
curl_multi_exec($master,$running);
} while($running > 0);
echo "results: ";
for($i = 0; $i < $node_count; $i++)
{
$results = curl_multi_getcontent ( $curl_arr[$i] );
echo( $i . "\n" . $results . "\n");
echo 'done';
file_put_contents('SCRAPEDHTML.txt',$results, FILE_APPEND);
}
}
заранее спасибо
3 ответа
Я думаю, что время выполнения php превышено. Вы можете попробовать вставить "set_time_limit(300);" в верхней части вашего php-файла, который включает функцию getHTML. Число "300" означает, что время выполнения php составляет 300 секунд.
Я попробовал свернуть библиотеку локонов в моем проекте. Я надеюсь, что это может быть полезно.
http://code.google.com/p/rolling-curl/source/browse/trunk/RollingCurl.php
Нарезать массив на куски по 10, затем выполнить curl_multi
цикл несколько раз
$perRequest = 10;
for($i = 0; $i < count($nodes); $i += $perRequest)
{
$currentNodes = array_slice($nodes, 0, $perRequest);
// Normal curl_multi code using $currentNodes
}