【问题标题】:Scraping Facebook pages with Goutte使用 Goutte 抓取 Facebook 页面
【发布时间】:2014-09-22 20:45:24
【问题描述】:

我正在尝试使用 Goutte 抓取 Facebook 页面,以收集页面的“创建日期”。 这无法通过 Graph 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;
}

关于检索完整页面内容的任何想法?

【问题讨论】:

    标签: php facebook laravel web-scraping goutte


    【解决方案1】:

    对于 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
    

    注意“永久移动”。

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

    总结:

    • 不要使用 Goutte 来查找上次修改时间。您需要解析 HTTP 标头,因此 cURL 是更好的选择。
    • 动态页面没有有意义的“创建日期”,无论如何都很难抓取
    • 始终检查页面重定向

    如果您想查找某个页面首次出现在 Internet 上的日期,我建议您尝试完全不同的策略:http://www.labnol.org/internet/search/find-publishing-date-of-web-pages/8410/

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

    【讨论】:

      猜你喜欢
      • 2018-10-23
      • 2018-10-17
      • 1970-01-01
      • 2016-02-01
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      相关资源
      最近更新 更多