代码之家  ›  专栏  ›  技术社区  ›  Sarfraz

数据擦除问题

  •  0
  • Sarfraz  · 技术社区  · 15 年前

    我正在从Facebook页面上抓取墙贴的数据,网址如下:

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

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

    问题:

    在可见的墙柱的末端,有 年长员额 链接,单击该链接后将显示更多墙柱。现在我该如何手动排序 点击 那个链接显示更多的墙柱和废弃这些柱?

    有没有用任何方法解决的?虽然我用的是卷发,但我希望能有什么解决办法来处理这种情况?

    更新:

    现在,我使用此代码获取所有数据,找到下一个链接并获取该URL的数据,依此类推,下面是代码:

    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 也设置为“开”。脚本中有什么问题吗?或者我没有以正确的方式进行递归?有什么解决方案/替代方案吗?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Gordon Haim Evgi    15 年前

    您应该使用图形API。您正在抓取的数据以json格式提供,网址为

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

    例子:

    $data = json_decode(file_get_contents(($url)));
    foreach($data->data as $post) {
        echo $post->from->name, ': ',
             $post->message,
             PHP_EOL;
    }
    

    上面将输出墙上的所有柱子。寻呼操作

    echo $data->paging->previous;
    echo $data->paging->next;
    

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

        2
  •  2
  •   CharlesLeaf    15 年前

    button/link可能会启动一个xmlhttprequest,所以用firebug/developer-console/无论你使用什么,在你的浏览器中查看它正在请求什么URL,用什么HTTP头等,然后用curl执行相同的请求,你就得到了它了吗?

        3
  •  0
  •   Dejan Marjanović    15 年前
    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加载的。您还需要计算出这些变量。最长时间可能是从什么时候开始显示帖子。

    好的,上链接可以短一些(相同的输出)。

    http://www.facebook.com/ajax/stream/profile.php?__a=1&profile_id=139878432710216&max_time=1283023194
    
    推荐文章