【问题标题】:php crawl - javascript enabledphp 抓取 - 启用 javascript
【发布时间】:2009-10-08 04:17:01
【问题描述】:

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;

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

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

* Mozilla Firefox
* Safari
* Microsoft Internet Explorer

我通过上述所有浏览器进行了测试 ?

【问题讨论】:

    标签: php web-crawler


    【解决方案1】:

    显然,在这种特定情况下,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是一件相当困难的事情(甚至google都没有解决它^^)

    有些引擎允许在没有浏览器的情况下运行 Javascript 代码(例如,rhino;或 Spidermonkey PECL extension,对于 PHP);但即使它们允许您运行 Javascript 代码,您也不会拥有浏览器提供的所有网站所依赖的环境和方法......


    一个想法,如果您需要爬取依赖于 Javascript 的网站,可能是使用Selenium,它会打开一个真正的浏览器(即 firefox 或其他),通过您的 PHP 代码控制它Selenium RC.

    但这意味着您的 PHP 机器上必须有图形环境和浏览器;这也相当沉重和缓慢——比加载网页要慢很多^^

    【讨论】:

      猜你喜欢
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 2014-08-13
      • 2010-09-16
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多