2011-11-15 8 views
1

私は複数のウェブページを取得する必要があります.100から500と言うことがあります。今はそれを行うためにカールを使用しています。ウェブページを取得する効果的な方法

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; 
} 

私の主な関心事は、スクリプトがこれらのWebページをすべて取得するのにかかる合計時間です。私は、取った時間が私のインターネット速度に正比例することを知っているので、大部分の時間は$html = curl_exec($ch);関数呼び出しによって取られます。

私はそれを一度しか作成せず、各ページごとにそれを再利用し、最終的にはそれを破壊すれば、各Webページごとに何度もカールインスタンスを作成して破棄するのではなく、次のようなものがあります:

<?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); 
?> 

合計の時間に大きな違いがありますか?それ以外の方法があれば教えてください。

答えて

1

ベンチマークはどうですか?それは2番目の方法でそれを行う方が効率的かもしれませんが、私はそれが多くになるとは思いません。私はあなたのシステムがマイクロ秒でカールのインスタンスを作成して破壊することができると確信しています。どちらの方法でも同じHTTP接続を開始する必要があります。

これらの多くを同時に実行していて、時間ではなくシステムリソースが心配だった場合は、検討する価値があります。ご存知のように、これを実行した時間のほとんどはネットワーク転送を待っているので、いずれの方法でも全体的な時間の変化に気づかないと思います。

0

ウェブスクレイピングの場合、私はYQL + JSON + xPathを使用します。 cURLを使用して実装します 多くのリソースを節約できると思います。

+0

検索した後のページの扱いに関する質問はありません。各ファイルのダウンロード方法です。 – JAL

+0

@flexxy:はい、私はそれを得ました。しかし、YQLを使ってウェブサイトからコンテンツをすばやく取得することができます。 – igniter

関連する問題