如何减少curl的加载时间并解析html

时间:2016-07-25 12:37:46

标签: php parsing curl

我需要减少脚本的加载时间。这是卷曲和简单的解析dom。 这是我的剧本,我需要帮助:( 它持续大约2分钟,我需要解析许多不同的页面!

    require_once ("simple_html_dom.php");

    function curl ($page){
        ob_start();
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "URL");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "POSTFIELDS");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($ch);
        curl_close($ch);
        ob_end_clean();
        return $result;
    }
    $start = microtime(true);
    set_time_limit(0);
    $text = "here text of last page";

    $i = 0;
    while(strpos(str_get_html(curl($i)), $text) == null){
        $html = str_get_html(curl($i));
        foreach($html->find('div#box-container-inner div.box') as $e){
PRINT etc... only for test
        }
        echo "parsata la pagina ".($i+1)."<br>";
        $i++;
    }
    $time_elapsed_secs = (microtime(true) - $start)/60;
    echo $time_elapsed_secs;

2 个答案:

答案 0 :(得分:0)

只需将卷曲超时作为参数设置添加到60秒或您的选择。

curl_setopt($ ch,CURLOPT_TIMEOUT,60);

答案 1 :(得分:0)

您似乎在每个循环中运行了两次CURL(一次评估while循环条件,一次设置$ html)并将结果字符串转换为每个循环的对象。每次循环时,这是四个潜在密集型进程,每个循环可以降低到两个。

相反,您可以在while循环评估中将$ html变量分配给str_get_html(curl($i))的结果:

while(strpos(($html = str_get_html(curl($i))), $text) === false) {
//    $html = str_get_html(curl($i));