首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据抓取问题

数据抓取问题
EN

Stack Overflow用户
提问于 2010-08-28 20:54:26
回答 3查看 1.1K关注 0票数 0

我正在从facebook页面上抓取数据,查看墙上的帖子,这是网址:

http://www.facebook.com/GMHTheBook?v=wall&ref=ts#!/GMHTheBook?v=wall&ref=ts

我成功地用卷发刮了所有可见的墙柱。

问题:

在可见墙帖子的末尾,有旧的Posts链接,一旦单击该链接,就会显示更多的墙壁帖子。现在,我如何手动单击链接的,以显示更多的墙壁帖子,以及废弃这些帖子呢?

有什么解决办法吗?我使用卷发,但我希望有什么解决办法来处理这种情况吗?

更新:

现在我使用这段代码获取所有数据,查找下一个链接并获取该url的数据等等,下面是代码:

代码语言:javascript
复制
ini_set('display_errors', true);
error_reporting(E_ALL);

$data = json_decode(file_get_contents(($url)), true);

$names = array();
$stories = array();

foreach($data['data'] as $post)
{
    $names[] = $post['from']['name'];
    $stories[] = $post['message'];
}

$url = $data['paging']['next'];

// this is meant to scrap data recurssively from the next links
while($url !== '')
{
    $url = $data['paging']['next'];
    $data = json_decode(file_get_contents(($url)), true);

    foreach($data['data'] as $post)
    {
        $names[] = $post['from']['name'];
        $stories[] = $post['message'];
    }

    $url = urldecode($data['paging']['next']);
    echo $url . '<br />';
}


for($j = 0; $j < count($names); $j++)
{
  $data .= $names[$j] . '|' . $stories[$j] . "\n";
}

$h = fopen("data.txt", "a+");
fwrite($h, $data);
fclose($h);

但问题是脚本一直在运行,根本没有输出,也没有创建任何文件。我已经将脚本时间设置设置为更高的值。allow_url_fopen也被设置为on。脚本中有什么问题吗?或者我可能没有以正确的方式进行递归?有什么解决办法/替代办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-28 21:44:37

您应该使用Graph。您正在抓取的数据可用JSON格式在

  • http://graph.facebook.com/GMHTheBook/feed

并包含用于获取上一页或下一页的链接,例如分页。

示例:

代码语言:javascript
复制
$data = json_decode(file_get_contents(($url)));
foreach($data->data as $post) {
    echo $post->from->name, ': ',
         $post->message,
         PHP_EOL;
}

以上将输出墙上的所有帖子。用于分页操作

代码语言:javascript
复制
echo $data->paging->previous;
echo $data->paging->next;

这将输出两个URL。你要做的就是再装一次。

票数 4
EN

Stack Overflow用户

发布于 2010-08-28 20:57:50

按钮/链接可能启动一个XMLHttpRequest,所以查看您的浏览器中的firebug/developer控制台/您使用的是什么,查看它请求的是什么url,以及使用什么headers等等。那么使用cURL执行相同的请求就可以了吗?

票数 2
EN

Stack Overflow用户

发布于 2010-08-29 01:22:40

代码语言:javascript
复制
http://www.facebook.com/ajax/stream/profile.php?__a=1&profile_id=139878432710216&viewer_id=(your facebook id)&filter=1&max_time=1283023194&_log_clicktype=Filter%20Stories%20or%20Pagination&ajax_log=1

它是通过ajax加载的。还需要计算出这些变量。最大的时间可能是从哪一点来展示帖子。

好的,上面的链接可以更短(相同的输出).

代码语言:javascript
复制
http://www.facebook.com/ajax/stream/profile.php?__a=1&profile_id=139878432710216&max_time=1283023194
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3592421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档