【问题标题】:Why CURL dosn't run on pages like facebook?为什么 CURL 不能在像 facebook 这样的页面上运行?
【发布时间】:2015-01-03 01:56:20
【问题描述】:

我正在尝试学习如何构建一个从群组获取信息的 facebook 群组爬虫(来自群组的帖子列表,其中包含帖子的作者、帖子 ID、发布日期等信息。

对我来说,重要的是要声明我正处于页面抓取研究的开始阶段!

从这个页面找到了一个很好的教程: http://www.oooff.com/php-scripts/basic-curl-scraping-php/basic-scraping-with-curl.php

运行这段代码时:

<?php
    $url = "http://www.oooff.com/";

    $ch = curl_init($url);                              // initialize the CURL library in my PHP script so we can later work on it - inside the handler. 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     // curl_setopt() function is used to set options on the $ch handler.// in this case we use the CURLOPT_RETURNTRANSFER option 
    $curl_scraped_page = curl_exec($ch);                //  "run all the stuff we've set" - return the data scraped to the variable $curl_scraped_page
    curl_close($ch);



    echo $curl_scraped_page;
?>

它可以工作,但有时当我运行它时,我会得到一个空白页。
当我在 facebook 上运行它时(或者更具体地在 FB 组上运行,因为这是我需要的),我得到一个空白页。我尝试在 yahoo.com 上运行它,我得到了相同的结果。

  • 为什么会这样?
  • 获取页面内容的正确方法是什么?

【问题讨论】:

  • 页面不再只是 html。他们是javascript。他们是CSS。它们是来自多个不同域/站点的内容。由于您刚刚开始,这里有一个非常重要的提示:在处理外部资源时永远不要假设成功。总是假设失败,检查失败,并将成功视为一个惊喜。在你的情况下if ($curl_scraped_page === false) { die(curl_error($ch)); }
  • 如果不是 boolean false,则 curl 成功,但没有返回任何内容。 var_dump($curl_scraped_page) 将显示其中的内容。可能是一个空字符串,或者一些不可打印的东西。
  • 调试这是个好主意,我之前尝试过使用错误功能,但没有成功。现在它起作用了。我在一个 FB 组上运行了这个脚本并收到了这条消息:“SSL 证书问题:无法获取本地颁发者证书”

标签: php facebook curl web-crawler


【解决方案1】:

如果您主要对 facebook 内容感兴趣,您可以使用 facebook api for php: https://developers.facebook.com/docs/reference/php/

CURL 只加载文件内容,不运行网页的 JavaScript。

根据Vivin Paliath answer PhantomJs 可能是从 JavaScript 网页获取内容的好方法:

[...] PhantomJS 是一个无头 WebKit 浏览器。它有自己的 API,可让您“编写”行为。所以你可以告诉 PhantomJS 加载页面并转储出你需要的数据。

【讨论】:

  • 我知道这个选项。我不知道如何使用 Graph API。我应该在我的服务器上运行脚本吗?因为我从FB信息中看不懂。无论哪种方式,由于某种原因,它似乎非常严格(我说得对吗?)。
  • @Hatul,我建议寻找教程:bit.ly/1x6NzVq。当然,在您的情况下,使用 Facebbok API 是获取所需信息的最佳方式。
  • 问题是我想要抓取其他没有 Graph API 的非 facebook 页面,所以无论哪种方式,我都必须学习如何做到这一点并成为一个真正的蜘蛛侠;)谢谢对于这些信息,我很感兴趣,我稍后会看一下。为你 +1 :) !
猜你喜欢
  • 2021-03-30
  • 1970-01-01
  • 2020-09-03
  • 2019-09-06
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
相关资源
最近更新 更多