PHP cURL在10个请求后设置延迟

时间:2012-10-22 11:41:44

标签: php web-scraping curl-multi

我正在使用PHP和cURL来抓取单个网站页面的HTML。通过实验,我发现只有在$nodes array中指定10个或更少的URL时,我的代码才有效(参见代码示例)。我需要一次刮掉大约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 个答案:

答案 0 :(得分:0)

将数组切成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
}

答案 1 :(得分:0)

我认为是超出了php的执行时间。 你可以尝试插入“set_time_limit(300);”在您的php文件的顶部,其中包含函数getHTML。 数字“300”表示此php执行时间为300秒。

答案 2 :(得分:0)

我尝试在我的项目中滚动curl库。我希望它可能会有所帮助。

http://code.google.com/p/rolling-curl/source/browse/trunk/RollingCurl.php