我必须获取多个网页,比方说100到500.现在我正在使用curl这样做。
function get_html_page($url) {
//create curl resource
$ch = curl_init();
//set url
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//$output contains the output string
$html = curl_exec($ch);
//close curl resource to free up system resources
curl_close($ch);
return $html;
}
我主要担心的是我的脚本获取所有这些网页所花费的总时间。我知道所花费的时间与我的互联网速度成正比,因此$html = curl_exec($ch);
函数调用占用了大部分时间。
我在考虑不是为每个网页反复创建和销毁curl实例,如果我只创建一次,然后只为每一个页面重复使用它,最后最终销毁它。类似的东西:
<?php
function get_html_page($ch, $url) {
//$output contains the output string
$html = curl_exec($ch);
return $html;
}
//create curl resource
$ch = curl_init();
//set url
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
.
.
.
<fetch web pages using get_html_page()>
.
.
.
//close curl resource to free up system resources
curl_close($ch);
?>
它会占用的总时间有什么显着差异吗?如果还有其他更好的方法,请告诉我相关信息吗?
答案 0 :(得分:1)
试图对它进行基准测试怎么样?第二种方式可能更有效,但我认为它不会增加太多。我确信你的系统可以在几微秒内创建和销毁curl实例。它必须每次都以任何一种方式启动相同的HTTP连接。
如果您同时运行其中许多并担心系统资源,而不是时间,则可能值得探索。正如您所指出的那样,大部分时间都在等待网络传输,因此我认为您不会注意到使用这两种方法的总体时间的变化。
答案 1 :(得分:0)
对于网页抓取,我会使用:YQL + JSON + xPath。您将使用cURL实现它 我想你会节省很多资源。