0

我试图捕捉所有链接,然后转到下一页,直到页面结束。我只是不断循环。我想我只是呆若木鸡,希望今天我能再次得到一些帮助。

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

}

4

2 回答 2

0

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

假设您从 A 页开始:

  • 页面 A 上的第一个链接链接到页面 B。
  • 您打开页面 B 并开始抓取链接。
  • 页面 B 上的第一个链接链接到页面 A。
  • 您打开页面 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
}
于 2013-03-04T02:19:06.837 回答
0

问题是您正在遵循上一个箭头以及下一个箭头。您的 css 选择器需要调整以解决此问题。

于 2013-03-04T02:35:16.550 回答