2013-03-04 38 views
0

我試圖把所有的鏈接都包含進去,然後轉到下一頁,直到頁面結束。 我只是不斷得到一個循環。我想我只是睜大眼睛,希望今天能再次得到一些幫助。simple-html-dom循環沒有結束

getLinks('http://www.homedepot.com/h_d1/N-5yc1vZaqns/h_d2/Navigation?catalogId=10053&langId=-1&storeId=10051&catStyle=ShowProducts#/?c=1&style=List');

function getLinks($URL) { 


$html = file_get_contents($URL); 

$dom = new simple_html_dom(); 
$dom -> load($html); 

    foreach ($dom->find('a[class=item_description]') as $href){ 
    $url = $href->href; 
    echo $url; 
} 



if ($nextPage = $dom->find("a[class='paginationNumberStyle page_arrows']", 0)){ 

    $nextPageURL = 'http://www.homedepot.com'.$nextPage->getAttribute('data-url'); 

    $dom -> clear(); 
    unset($dom); 
    getLinks($nextPageURL); 
} else { 
    echo "\nEND"; 
    $dom -> clear(); 
    unset($dom); 
} 

}

+0

您能否修理您的縮進?另外,'getLinks'函數似乎沒有關閉。 – 2013-03-04 02:06:58

+1

如果頁面A鏈接到頁面B,但頁面B鏈接回頁面A會發生什麼?我認爲你需要保留你訪問過的網頁列表。 – 2013-03-04 02:08:31

+0

頁面a pageb的鏈接?這應該只是收集鏈接,然後進入下一頁,並收集到底。我完全搞砸了嗎?我不喜歡simplehtmldom和一個朋友真的想使用它。 – dianeinflorida 2013-03-04 02:14:00

回答

0

在代碼中,你從來沒有跟蹤您去過的地方。

比方說,你第A開始:

  • 在網頁A鏈接的第一個鏈接到頁面B.
  • 你打開網頁B,並開始爬行的鏈接。
  • 第B鏈的第一個鏈接到頁面A.
  • 你打開網頁A和開始抓取的鏈接....

這個過程會一直重複,因爲你最終會爬一遍又一遍的相同頁面。如果您已經抓取了該網頁,則需要保留已抓取的網頁列表並跳過。

另請注意,它可能不是一個簡單的循環。

  • A鏈接至B
  • 乙鏈接到C
  • Ç鏈接到d
  • ....
  • s鏈路到T
  • Ť鏈接至A

不太熟悉PHP,但是像這樣:

$arr[$url] = true; // Tell it that we know the url 
if (array_key_exists($url, $arr)) { 
    // check if the url exists in the hash 
} 
+0

有沒有簡單的方法來跟蹤現有的代碼? – dianeinflorida 2013-03-04 02:22:47

+0

不要這樣做,這會使問題過度複雜化 – pguardiario 2013-03-04 02:34:14

+0

我要瘋了現在想起我在這一點上什麼也沒記得 – dianeinflorida 2013-03-04 02:34:42

0

問題是你在跟隨以前的箭頭以及下一個箭頭。您的CSS選擇器需要進行調整以解決這個問題。