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

問題は、前の矢印と次の矢印をたどっていることです。これを考慮して css セレクターを調整する必要があります。

于 2013-03-04T02:35:16.550 に答える
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 に答える