我想从公开的Facebook墙帖子中获得数据


I would like to get data from a public Facebook wall post

是否有人刮擦或使用FB API从公开个人资料的墙上帖子访问数据?如果您只访问URL,您可以检查元素以查看大部分数据以及用于在墙上无限滚动的ajax调用。

你会怎么做呢?

以下帖子没有得到回答,或者只是不同的场景,但很接近:

  • 使用Graph API从公共Facebook页面获取墙源-它真的这么复杂吗?

  • 向非Facebook用户显示Facebook帖子

  • 如何显示facebook feed消息从我的网站没有access_token?

  • 如何使用facebook API获取公共墙帖子

作为我想要完成的一个例子,这个公共档案https://www.facebook.com/aurelia.filion有一个2013年11月21日的墙上帖子,我假设我想从中获取数据。怎么才能做到呢?

禁止抓取Facebook 除非您有明确的书面许可。


Facebook自动数据收集条款(复制日期为2017年3月19日)

  1. 这些条款管理您通过自动方式从Facebook收集数据,例如通过收集机器人、机器人、蜘蛛或抓取器("自动数据收集"),以及您对该数据的使用。

  2. 未经Facebook明确书面许可,您不得参与自动数据收集。

  3. 通过获得参与自动数据收集的许可,您同意遵守这些自动数据收集条款,其中包含通过引用的权利和责任声明。

  4. 您同意,您对通过自动数据收集收集到的数据的使用将仅限于搜索索引以便在互联网上显示,除非Facebook单独批准了其他使用和在互联网上显示。

  5. 您同意您不会出售通过自动数据收集收集的任何数据,或通过自动数据收集收集的数据衍生的任何数据。

  6. 您同意您不会以汇总或批量的形式传输通过自动数据收集收集到的数据。

  7. 您同意应Facebook的书面要求销毁您通过自动数据收集收集到的所有数据,并且您将证明该等销毁行为,否则将受到伪证罪的处罚。

  8. 您同意Facebook可随时以任何理由撤销授予的任何许可,并且您同意在收到撤销通知后立即停止收集和使用通过自动数据收集收集的数据。

  9. 您同意在收到Facebook请求后的十(10)天内,提供通过自动数据收集收集的所有数据的使用情况。

  10. 您同意您不会规避Facebook为防止违反这些条款而实施的任何措施。

  11. 您同意您不会违反任何机器人排除头中的限制。

  12. 您同意只使用您自己的真实IP地址/useragent身份,不使用其他服务的IP地址/useragent字符串掩盖您的服务。

  13. 您同意,未经Facebook明确书面同意,您不会将任何经批准的IP地址或useragent转让给任何一方。

  14. 您同意,任何违反这些条款的行为都可能导致您立即被禁止使用所有Facebook网站、产品和服务。您承认并同意,违反或可能违反这些条款将造成无法弥补的伤害,金钱赔偿将是一种不充分的补救措施,Facebook有权获得临时和永久的禁令救济,而无需发布任何保证金或其他担保,以限制您或代表您的任何人违反或可能违反这些条款。本协议的任何内容均不应被解释为阻止Facebook寻求任何及所有可用的补救措施,包括追回金钱损失。

  15. 无论通过禁止反诉、暗示或其他方式,本协议均不应被解释为授予或许可任何知识产权。

在这里阅读完整列表https://www.facebook.com/apps/site_scraping_tos_terms.php

FaceBook已经关闭了你可以从API中抓取的大部分数据。除非你是朋友,否则它仅限于他们的名字,用户名,地区,如果我没记错的话,性别。这些都是默认设置。如果他们特别选择分享更多信息(一般来说,与应用程序共享的人很少),那么就会有更多的信息。

我认为要获得帖子,你需要那个人允许你的应用程序(开发者ID)访问他们的帖子。

至于刮痧。你可以这么做,但是FB在这方面是明智的。在他们向你展示验证码之前,你可以抓取大约1000 - 2000页。那么你还需要多个帐户和代理。

首先需要CURL。我建议在PHP中使用以下命令:

http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading

http://semlabs.co.uk/journal/multi-threaded-stack-class-for-php

这里有一些基本的例子。我相信我的历史中有一些关于登录的帖子。报废很简单。我更喜欢RegEx从页面中获取详细信息,如:

preg_match_all( '~<div.*? class="this-data".*?>(.*?)<'/div>~is', $page, $mats );

要从facebook墙上获取数据,您必须使用facebook Open Graph API和facebook OAuth从facebook外部登录。你会在这里得到完整的细节facebook开发者面板