php crawl - включен JavaScript - PullRequest
       4

php crawl - включен JavaScript

0 голосов
/ 08 октября 2009

Bonjour, кто-нибудь знает способ создания паука, который действует так, как будто на нем включен 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)

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

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

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

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

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

* Mozilla Firefox
* Safari
* Microsoft Internet Explorer

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

1 Ответ

2 голосов
/ 08 октября 2009

Очевидно, что в данном конкретном случае Facebook проверяет только заголовок HTTP "User-Agent".

Если я использую эту часть кода, основанную на curl , которая позволяет мне устанавливать множество оптонов, используя 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; или расширение Spidermonkey PECL , для PHP) ; но даже если они позволят вам запускать код Javascript, у вас не будет всей среды и методов, предоставляемых браузером, на которые полагаются веб-сайты ...


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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...