php crawl - 启用了JavaScript

时间:2009-10-08 04:17:01

标签: php web-crawler

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操作的站点(无法访问)。

编辑: PHP代码: 刚检查过

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

返回: 您正在使用不兼容的Web浏览器。

抱歉,不够酷,无法支持您的浏览器。请使用以下浏览器之一保持真实:

* Mozilla Firefox
* Safari
* Microsoft Internet Explorer

我测试了所有上述浏览器 ?

1 个答案:

答案 0 :(得分:2)

显然,在这种特定情况下,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;

我得到的信息和你一样。


但是,如果我尝试发送一个与Firefox相对应的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代码(例如rhino;或者Spidermonkey PECL extension,用于PHP);但即使它们允许您运行Javascript代码,您也不会拥有浏览器提供的所有环境和方法,而网站依赖这些环境和方法......


如果您需要抓取依赖于Javascript的网站,可能会使用Selenium,这会打开一个真正的浏览器(即firefox或其他),从您的PHP控制它代码来自Selenium RC

但这意味着您必须在PHP机器上拥有图形环境和浏览器;这也是非常沉重和缓慢 - 比加载网页慢很多^^