simple-html-dom循环没有结束

时间:2013-03-04 02:05:11

标签: php loops hyperlink 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);
}

}

2 个答案:

答案 0 :(得分:0)

在您的代码中,您永远不会跟踪您去过的地方。

假设您从第A页开始:

  • 第A页上的第一个链接指向第B页。
  • 您打开B页并开始抓取链接。
  • 第B页的第一个链接指向第A页。
  • 您打开第A页并开始抓取链接....

此过程将无限期重复,因为您最终会反复抓取相同的网页。您需要保留已抓取的网页列表,如果您已抓取该网页,则需要跳过该网页。

另请注意,它可能不是一个简单的循环。

  • 指向B
  • 的链接
  • B链接到C
  • C链接到D
  • ....
  • S链接到T
  • 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
}

答案 1 :(得分:0)

问题是您正在关注之前的箭头以及下一个箭头。您的css选择器需要进行调整以解决此问题。