php crawl – включен javascript

Bonjour, знает ли кто-нибудь о способе создания паука, который действует так, как если бы он включал javascript?

Код PHP:

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

он будет извлекать выходные данные этой страницы. Если вы использовали PHP Code:

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

он будет возвращать выходной сигнал, который будет включать в себя что-то вроде строк «у ​​вас должен быть включен javascript для продолжения», потому что это сайт с javascript-управлением (недоступен).

EDIT: Код PHP: только что проверили

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

возвращает: вы используете несовместимый веб-браузер.

Извините, не было достаточно круто, чтобы поддерживать ваш браузер. Сохраните его в одном из следующих браузеров:

 * Mozilla Firefox * Safari * Microsoft Internet Explorer 

который я тестировал во всех вышеперечисленных браузерах?

По-видимому, в этом конкретном случае Facebook тестирует только HTTP-заголовок « User-Agent ».

Если я использую эту часть кода, основанную на завитке , что позволяет мне устанавливать множество оплонов, используя 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 (я только что скопировал тот, который действительно отправляет реальный 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 без браузера – довольно сложная вещь (даже Google не разрешил это ^^)

Есть механизмы, которые позволяют запускать Javascript-код без браузера (например, rhino или расширение PECL Spidermonkey для PHP) ; но даже если они позволяют вам запускать Javascript-код, у вас не будет всей среды и методов, предоставляемых браузером, на которых веб-сайты полагаются …

Идея, если вам нужно обходить сайт, зависящий от Javascript, может заключаться в использовании Selenium , который открывает реальный браузер (то есть firefox или другой) , контролируя его из вашего PHP-кода через Selenium RC .

Но это означает, что у вас должна быть графическая среда и браузер, на вашем компьютере PHP; это также довольно тяжело и медленно – намного медленнее, чем просто загрузка веб-страницы ^^