2011-02-02 9 views
1

シンプルなHTML DOM、見つけるのリンクrecurssively

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>'; 

これは、ページ上のすべてのリンクを見つけるには、しかし、私が見つかりました。リンクに行くことができるようにしたいです また、の中には、などのリンクが再帰的に見つかっているものがあります。

どのようにすればいいですか?

+1

上記のリンク内のリンクを見つけると、どんな結果になるでしょうか? – RobertPitt

+0

@Robert:ええ、リンク内で再帰的にリンクします。 – Sarfraz

答えて

3

は、再帰関数を使用して深さを追跡:

function findLinks($url, $depth, $maxDepth) { 
    // fetch $url and parse it 
    // ... 
    if ($depth <= $maxDepth) 
    foreach($html->find('a') as $element) 
     findLinks($element->href, $depth + 1, $maxDepth); 
} 

そして、あなたはfindLinks($rootUrl, 1, 5)のようなものを呼び出すことによって開始します。

+0

それでは、この論理も理解するのに苦労しています。 – RobertPitt

+0

@Murilo:コメント行を読むのに気をつけますか? '$ url'を自分で取得する必要があります。ファイルをどこから取得しているのか分かりません。 – casablanca

+0

これは再帰的なページではなく、1ページ内の再帰的な要素ではなく、1ページあり、すべてのリンクを取得したいと思っています。 – RobertPitt

1

私はこれまで同様の機能が必要でした。あなたができることは、mysqlを使ってリンクを保存することです。

私の場合、私はのtodoテーブルとページテーブルを持っていました。種をあなたののtodoいくつかのURLであなたはスパイダーにしたいテーブル。

私がしなければならなかったのは、必要なページ情報(平文とタイトル)を取得し、これをmysql db ページに保存することでした。その後、私はリンクをループして、todoテーブルに追加しました。最後のステップは、私のtodoリストから現在のページを削除してからループすることです。

grab a url from todo loop 
{ 
    get current page title and plaintext store it in pages table 
    loop through links Add found links to todo table 
    remove current page from todo 
} 
関連する問題