2009-10-08 5 views
0

Bonjour, est-ce que quelqu'un sait comment créer un araignée qui fonctionne comme si javascript était activé?php crawl - javascript enabled

Code PHP:

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

il récupérerait la sortie de cette page. Si vous avez utilisé, Code PHP:

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

il retournerait trhe sortie qui im ​​deviner comprendrait quelque chose le long des lignes de « vous devez avoir activé javascript pour continuer », car il est un site exploité javascript (non accessible).

EDIT: Code PHP: juste vérifié

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

retours: Vous utilisez un navigateur Web compatible.

Désolé, pas assez cool pour soutenir votre navigateur. S'il vous plaît garder réel avec l'un des navigateurs suivants:

* Mozilla Firefox 
* Safari 
* Microsoft Internet Explorer 

qui je l'ai testé à travers tous les navigateurs ci-dessus ?

Répondre

2

Apparemment, dans ce cas précis, Facebook teste uniquement l'en-tête HTTP "User-Agent".

Si j'utilise cette partie de code, basé sur curl, ce qui me permet de régler beaucoup de optons, en utilisant 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; 

je reçois le même message que vous faites.


Mais, si je tente d'envoyer un User-Agent qui correspondent à Firefox (je copie-collé juste celui que mon vrai Firefox est l'envoi en fait):

$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; 

Je reçois la vraie page d'accueil Facebook, et non ce message d'erreur sur le navigateur incompatible.


Bien sûr, cela ne résoudra pas le problème de Javascript ne pas être exécuté ...

... Mais l'exécution Javascript sans navigateur est tout à fait une chose difficile (même pas Google a résolu le problème ^^)

Il existe des moteurs qui permettent d'exécuter du code Javascript sans navigateur (rhinocéros, par exemple, ou Spidermonkey PECL extension, PHP); mais même s'ils vous permettent d'exécuter du code Javascript, vous n'aurez pas tout l'environnement et toutes les méthodes fournis par le navigateur, sur lesquels les sites s'appuient ...


Une idée, si vous avez besoin d'explorer un site dépendant de Javascript, peut-être utiliser Selenium, qui ouvre un vrai navigateur (IE, Firefox ou autre), contrôlant à partir de votre code PHP via Selenium RC . Mais cela signifie que vous devez avoir un environnement graphique, et un navigateur, sur votre machine PHP; c'est aussi assez lourd et lent - beaucoup plus lent que le chargement d'une page Web ^^