2009-10-08 64 views
0

Bonjour,有沒有人知道創建一個蜘蛛的方式,就好像它已啓用JavaScript的?php抓取 - 啓用javascript

PHP代碼:

file_get_contents("http://www.google.co.uk/search?hl=en&q=".$keyword."&start=".($x*10)."&sa=N") 

它將檢索頁面的輸出。 如果使用, PHP代碼:

file_get_contents("http://www.facebook.com/something/something.something.php") 
(im not sure i just know face book is a good example) 

它將返回trhe輸出,即時猜測將包括大致爲「你必須啓用繼續JavaScript的」線的東西,因爲它是一個JavaScript手術部位(未無障礙)。

編輯: PHP代碼: 剛纔檢查

$link = "http://www.facebook.com/index.php"; 
$contents = file_get_contents($link); 
echo $contents; 

回報: 您使用的是不兼容的Web瀏覽器。

對不起,不足以支持您的瀏覽器。請保持它與以下瀏覽器的一個真實:

* Mozilla Firefox 
* Safari 
* Microsoft Internet Explorer 

,我通過所有上述瀏覽器 測試?

回答

2

顯然,在這個特定的情況下,Facebook只測試HTTP頭「User-Agent」。

如果我使用這個代碼部分,基於curl,這讓我設置了很多optons,用curl_setopt

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.facebook.com/index.php"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$html = curl_exec($ch); 
curl_close($ch); 
echo $html; 

我得到同樣的消息,你做的。


但是,如果我嘗試發送一個User-Agent對應於火狐(我只是複製粘貼了一個我真正的Firefox實際發送):

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.facebook.com/index.php"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090910 Ubuntu/9.04 (jaunty) Shiretoko/3.5.3"); 
$html = curl_exec($ch); 
curl_close($ch); 
echo $html; 

我得到了真正的Facebook主頁,而不是該錯誤消息關於不兼容的瀏覽器。


當然,這不會解決的Javascript沒有被執行的問題...

...但沒有瀏覽器執行JavaScript是一個相當困難的事情(甚至谷歌解決它^^ )

有引擎,允許沒有瀏覽器運行JavaScript代碼(犀牛,例如;或Spidermonkey PECL extension,對於PHP);但即使它們允許您運行Javascript代碼,您也不會擁有瀏覽器提供的所有環境和方法,哪些網站依賴於這些方法......


一個想法,如果你需要抓取一個JavaScript相關的網站,可能是使用Selenium,這將打開一個真正的瀏覽器(IE,火狐,或其他),通過Selenium RC從你的PHP代碼controling它。

但是這意味着你必須在你的PHP機器上有一個圖形環境和一個瀏覽器;這也是相當重和慢 - 比只加載網頁慢很多^^