获取网页的有效方式

时间:2011-11-15 18:52:47

标签: php optimization

我必须获取多个网页,比方说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);
?>

它会占用的总时间有什么显着差异吗?如果还有其他更好的方法,请告诉我相关信息吗?

2 个答案:

答案 0 :(得分:1)

试图对它进行基准测试怎么样?第二种方式可能更有效,但我认为它不会增加太多。我确信你的系统可以在几微秒内创建和销毁curl实例。它必须每次都以任何一种方式启动相同的HTTP连接。

如果您同时运行其中许多并担心系统资源,而不是时间,则可能值得探索。正如您所指出的那样,大部分时间都在等待网络传输,因此我认为您不会注意到使用这两种方法的总体时间的变化。

答案 1 :(得分:0)

对于网页抓取,我会使用:YQL + JSON + xPath。您将使用cURL实现它 我想你会节省很多资源。