2011-06-26 7 views
0

以下は、特定の深さのページのURLを取得するリンククローラです。最後に、クロールされたばかりのURLのすべての電子メールに一致する正規表現を追加しました。 2番目の部分で分かるように、file_get_contentと同じページがダウンロードされました。つまり、実行時間と帯域幅が2倍になることを意味します。類似の特性を持つ2つの部分をマージするコードへの変更

最初にダウンロードしたページを使用して、もう一度やりますか?ありがとうございました。

function crawler($url, $depth = 2) { 

    $dom = new DOMDocument('1.0'); 
    if (!$parts || [email protected]$dom->loadHTMLFile($url)) { 
     return; 
    } 
. 
. 
. 

//this is where the second part starts 

    $text = file_get_contents($url); 
    $res = preg_match_all("/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i", $text, $matches); 

} 
+1

なぜだけではなく、 '$内容=のfile_get_contents($のURL); if(!$ parts ||!@ dom-> loadHTML($ contents)){// ... 'そして関数の最後に' $ contents'を再利用しますか? – Slava

+0

'$ text = file_get_contents($ url);を' $ text = $ dom-> saveHTML(); 'に置き換えるよりも速いと思いますか? – EnexoOnoma

答えて

0

置き換えます

$text = file_get_contents($url); 

で:

$text = $dom->saveHTML(); 

http://www.php.net/manual/en/domdocument.savehtml.php

代わりに、あなたの関数の最初の部分では、あなたがfile_get_contentsを使用して変数にHTMLを救うことができますそれを$dom->loadHTMLに渡します。そうすれば、正規表現で変数を再利用することができます。

http://www.php.net/manual/en/domdocument.loadhtml.php

+0

ありがとう、テストされ、働いています(最初の部分)。私にこのメリットを説明し、他のマージを提案してください。 – EnexoOnoma

+0

これは、リモートサーバーへの別の呼び出しを回避するための2つの最良の方法です。どちらの方法でも動作します。最初の変数は1つ少ない変数を使用しますが、インポートされたHTMLを余分に処理する必要があります。 2つめの処理では処理は行われませんが、その間に余分な変数にHTMLを格納する必要があります。私はそれが片方の手で6、もう一方では半ダースだと思う。 – webbiedave

+0

ウェブサイトが本当に大きなクロールの深さで大きければ、どちらをお勧めしますか?私は共有ホスティングでスクリプトを実行します。あなたは私の編集したり、2番目のソリューションのために部品を投稿してください。 – EnexoOnoma

関連する問題