0

我已经在 stackoverflow 和网络上进行了搜索,这里肯定遗漏了一些东西。我还没有找到我正在寻找的东西。也许它被称为别的东西..我下面有这段代码,它将在第一个文件夹中抓取所有内容,但不会从其他文件夹中抓取其他项目.. 例如,它抓取第一个 / 前面的所有内容,但如果您有一个站点 mysite。 com/folder2/ 它不会抓取 folder2。一切都是联系在一起的。它也确实向后移动。如果你把网站最长的链接放上去,就会一直走到网站的最前面。我不确定我错过了什么,任何指针都会很棒。该网站是我试图废弃的 joomla 网站。

<?php function storelink($web,$taken) {
$query = "INSERT INTO scanned (web, taken) VALUES ('$web', '$taken')";
mysql_query($query) or die('Error, insert query failed');
  }

   $target_web = "mysite.com";
  $userAgent = 'bobsbot(http://www.somebot.com/bot.html)';

 // make the cURL request to $target_web
 $ch = curl_init();

  curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
 curl_setopt($ch, CURLOPT_URL, $target_web);
 curl_setopt($ch, CURLOPT_FAILONERROR, true);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
 curl_setopt($ch, CURLOPT_AUTOREFERER, true);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
 curl_setopt($ch, CURLOPT_TIMEOUT, 1000);



  $html= curl_exec($ch);
  if (!$html) {
echo "<br />cURL error number:" .curl_errno($ch);
echo "<br />cURL error:" . curl_error($ch);
exit;
}

    // parse the html into a DOMDocument
  $dom = new DOMDocument();
   @$dom->loadHTML($html);

  // grab all the on the page
  $xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

  for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$web = $href->getAttribute('href');
storeLink($web,$target_web);
echo "<br />Link saved: $web";




 } ?>
4

1 回答 1

0

如果我理解正确,您想抓取一个站点并保存所有 URL。这意味着您在遇到 URL 时需要递归。

你用来启动蜘蛛的函数叫做saveLink($web, $taken). 遇到链接时调用的函数是storeLink($web, $target_web). 不应该这样saveLink($web, $target_web)吗?

saveLink()应该是递归的并且还执行 cURL 请求。cURL URL 应设置为遇到的链接。这样,它将解析遇到的所有链接的 DOM 并跟踪其中的所有链接。

于 2013-02-19T14:38:08.510 回答