我试图用Goutte抓取facebook页面,以收集页面的"创建日期"。这是不能通过图形API访问的。
在测试中,我能够从像tutsplus和symfony-project这样的页面检索所有链接,但是当我试图访问像'https://www.facebook.com/151116474914629'这样的页面时,它返回'2'链接,这是不正确的。
代码: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;
}
关于检索整页内容有什么想法吗?
对于Facebook,页面的绝大多数内容都是动态生成的——多个Ajax调用等等。这使得它非常非常难刮。当然,对于任何动态生成的页面,"创建日期"实际上是您每次请求页面的日期。
在网页的环境中,我不知道有什么明显的方法来获取创建日期,但是修改日期是HTTP 1.1规范的一个可选部分。因此,许多(但不是全部)网站会将Last-Modified标头与网页一起发送。这个头可以通过编程方式修改,在动态网页上是相当无意义的,所以我不会依赖它。
无论如何,你在Facebook上都不走运。没有Last-Modified标题(我已经检查过了,包括遵循这个特定页面的重定向)。我不知道你还能找到什么连接到这个页面,找到创建日期。关于本页上的其他Goutte操作,并记住我所说的动态页面创建,您仍然可以检索一些内容。只是要小心改变方向。在命令行中使用cURL,您可以看到网页从https://www.facebook.com/151116474914629重定向到https://www.facebook.com/PhilzCoffeeCastro:
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
注释"Moved permanent ".
所以你需要测试重定向,并确保你正在抓取正确的页面。
在简介:- 不要使用Goutte查找最后修改时间。你需要解析HTTP头,所以cURL是一个更好的选择。
- 动态页面没有有意义的"创建日期",无论如何都很难抓取
- 始终检查页面重定向
如果你想找到一个页面第一次出现在互联网上的日期,我建议你尝试一个完全不同的策略:http://www.labnol.org/internet/search/find-publishing-date-of-web-pages/8410/
免责声明:我不知道什么是"图形API",所以我承认我可能不完全理解你的问题的背景。我希望上面的一些对你有帮助。