2011-07-06 9 views
0

私は、Webページのリンクを取得し、そのURLをエコーし​​、特定のドメインの下で同じことをするために他のページにクロールさせる簡単なクローラをPHPで作成したかったのです。ここでcURLを使用する必要がありますか?また、どのように1つのクローラの深さを指定します。phpの単純なクローラがリンクをエコーする

私は、この今のところしている:

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach($dom->getElementsByTagName('a') as $node) { 
    echo $dom->saveXml($node), PHP_EOL; 
} 
+0

「CURLを使用するか使用しない」という唯一の質問がある場合は、答えは「はい、使用してください」 – zerkms

+0

まあ私はこれを行う方法も知りたいです...私はかなり新しいcURLです。 。そして私はかなり見ていました – re1man

+0

私はあなたがPHPでタイムアウト制限に遭遇するかもしれないと付け加えたいと思います –

答えて

2

は、カールの周りに単純なラッパーをSnoopyをチェックしてください。以下はいくつかのサンプルコードです

/* 
You need the snoopy.class.php from 
http://snoopy.sourceforge.net/ 
*/ 
  
include("snoopy.class.php"); 
  
$snoopy = new Snoopy; 
  
// need an proxy?: 
//$snoopy->proxy_host = "my.proxy.host"; 
//$snoopy->proxy_port = "8080"; 
  
// set browser and referer: 
$snoopy->agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"; 
$snoopy->referer = "http://www.jonasjohn.de/"; 
  
// set some cookies: 
$snoopy->cookies["SessionID"] = '238472834723489'; 
$snoopy->cookies["favoriteColor"] = "blue"; 
  
// set an raw-header: 
$snoopy->rawheaders["Pragma"] = "no-cache"; 
  
// set some internal variables: 
$snoopy->maxredirs = 2; 
$snoopy->offsiteok = false; 
$snoopy->expandlinks = false; 
  
// set username and password (optional) 
//$snoopy->user = "joe"; 
//$snoopy->pass = "bloe"; 
  
// fetch the text of the website www.google.com: 
if($snoopy->fetchtext("http://www.google.com")){ 
    // other methods: fetch, fetchform, fetchlinks, submittext and submitlinks 
  
    // response code: 
    print "response code: ".$snoopy->response_code."<br/>\n"; 
  
    // print the headers: 
  
    print "<b>Headers:</b><br/>"; 
    while(list($key,$val) = each($snoopy->headers)){ 
     print $key.": ".$val."<br/>\n"; 
    } 
  
    print "<br/>\n"; 
  
    // print the texts of the website: 
    print "<pre>".htmlspecialchars($snoopy->results)."</pre>\n"; 
  
} 
else { 
    print "Snoopy: error while fetching document: ".$snoopy->error."\n"; 
} 

"fetchlinks"を使用してリンクを取得する必要があります。