Php 用痛风刮掉Facebook页面

Php 用痛风刮掉Facebook页面,php,facebook,laravel,web-scraping,goutte,Php,Facebook,Laravel,Web Scraping,Goutte,我试图用Goutte刮去facebook页面,以收集页面的“创建日期”。 这无法通过图形API访问 在测试中,我能够从tutsplus和symfony project等页面检索所有链接,但是当我尝试访问“”等页面时,它会返回不正确的“2”链接 代码: 关于检索整个页面的内容有什么想法吗?在Facebook上,页面的绝大多数内容都是动态生成的——多个Ajax调用等等。这使得刮起来非常非常困难。当然,对于任何动态生成的页面,“创建日期”实际上就是您每次请求页面的日期 在web页面的上下文中,我不知道

我试图用Goutte刮去facebook页面,以收集页面的“创建日期”。 这无法通过图形API访问

在测试中,我能够从tutsplus和symfony project等页面检索所有链接,但是当我尝试访问“”等页面时,它会返回不正确的“2”链接

代码:


关于检索整个页面的内容有什么想法吗?

在Facebook上,页面的绝大多数内容都是动态生成的——多个Ajax调用等等。这使得刮起来非常非常困难。当然,对于任何动态生成的页面,“创建日期”实际上就是您每次请求页面的日期

在web页面的上下文中,我不知道有什么明显的方法可以获得创建日期,但是修改日期是作为HTTP 1.1规范的可选部分包含的。因此,许多(但不是所有)网站将随网页一起发送最后修改的标题。这个标题可以通过编程方式修改,在动态网页上没有任何意义,所以我不依赖它

不管怎么说,你在Facebook上的运气都不好。没有最后修改的标题(我已经检查过了,包括遵循这个特定页面的重定向)。我不知道你还能找到什么连接到这个页面,找到创建日期

与此页面上的其他gout操作相关,请记住我所说的动态页面创建,您仍然可以检索一些内容。注意重定向。在命令行中使用cURL,可以看到网页从重定向到:

注意“永久移动”

因此,您需要测试重定向,并确保正在刮取正确的页面

总之:

  • 不要使用痛风仪查找上次修改的时间。您需要解析HTTP头,所以cURL是一个更好的选择
  • 动态页面没有有意义的“创建日期”,无论如何都很难抓取
  • 始终检查页面重定向
如果您想找到网页首次出现在互联网上的日期,我建议您尝试完全不同的策略:

免责声明:我不知道什么是“图形API”,所以我承认我可能不完全理解您问题的背景。不过,我希望上面的一些内容会有所帮助

use Symfony\Component\DomCrawler\Crawler;
use Goutte\Client as Goutte;

public function goutte()
{
    $url_to_traverse = 'https://www.facebook.com/151116474914629';

    $client = new Goutte();
    $crawler = $client->request('GET', $url_to_traverse);
    $status_code = $client->getResponse()->getStatus();
    if($status_code==200){
        $a_count = $crawler->filter('a')->count();     
    }
    return $a_count;
}
me@here:~$ curl --head https://www.facebook.com/151116474914629
HTTP/1.1 301 Moved Permanently
Location: https://www.facebook.com/PhilzCoffeeCastro
[snip]
Date: Tue, 16 Sep 2014 12:54:01 GMT
Connection: keep-alive
Content-Length: 0