Php 用痛风刮掉Facebook页面
我试图用Goutte刮去facebook页面,以收集页面的“创建日期”。 这无法通过图形API访问 在测试中,我能够从tutsplus和symfony project等页面检索所有链接,但是当我尝试访问“”等页面时,它会返回不正确的“2”链接 代码:Php 用痛风刮掉Facebook页面,php,facebook,laravel,web-scraping,goutte,Php,Facebook,Laravel,Web Scraping,Goutte,我试图用Goutte刮去facebook页面,以收集页面的“创建日期”。 这无法通过图形API访问 在测试中,我能够从tutsplus和symfony project等页面检索所有链接,但是当我尝试访问“”等页面时,它会返回不正确的“2”链接 代码: 关于检索整个页面的内容有什么想法吗?在Facebook上,页面的绝大多数内容都是动态生成的——多个Ajax调用等等。这使得刮起来非常非常困难。当然,对于任何动态生成的页面,“创建日期”实际上就是您每次请求页面的日期 在web页面的上下文中,我不知道
关于检索整个页面的内容有什么想法吗?在Facebook上,页面的绝大多数内容都是动态生成的——多个Ajax调用等等。这使得刮起来非常非常困难。当然,对于任何动态生成的页面,“创建日期”实际上就是您每次请求页面的日期 在web页面的上下文中,我不知道有什么明显的方法可以获得创建日期,但是修改日期是作为HTTP 1.1规范的可选部分包含的。因此,许多(但不是所有)网站将随网页一起发送最后修改的标题。这个标题可以通过编程方式修改,在动态网页上没有任何意义,所以我不依赖它 不管怎么说,你在Facebook上的运气都不好。没有最后修改的标题(我已经检查过了,包括遵循这个特定页面的重定向)。我不知道你还能找到什么连接到这个页面,找到创建日期 与此页面上的其他gout操作相关,请记住我所说的动态页面创建,您仍然可以检索一些内容。注意重定向。在命令行中使用cURL,可以看到网页从重定向到: 注意“永久移动” 因此,您需要测试重定向,并确保正在刮取正确的页面 总之:
- 不要使用痛风仪查找上次修改的时间。您需要解析HTTP头,所以cURL是一个更好的选择
- 动态页面没有有意义的“创建日期”,无论如何都很难抓取
- 始终检查页面重定向
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