如何获取Facebook公共页面内容访问只是为了提取数据?

hey*_*nni 6 python facebook facebook-page web-scraping facebook-graph-api

对于大学的项目,我需要从相同的Facebook页面中提取诸如帖子和评论等数据.几个月前一切都很好但现在要从您需要公共页面内容访问的页面获取数据.

为了让我的应用得到审核,我需要添加:

  • 我使用该应用程序的平台
  • 一个截屏视频,显示"人们如何看到您应用中使用的此功能"
  • 解释我如何使用页面公共内容访问来增强我的应用程序的体验.
  • 隐私政策网址

作为一名只需要为考试提取一些数据的学生,我没有任何我使用该应用程序的网站/平台.我在Python上使用Facebook Graph API.
我在这个网站上查看了隐私策略生成器,但我没有任何网站或移动应用程序,我使用API​​ ...

我的情况有没有办法通过API提取数据而没有这个要求,或者我更好地找到其他解决方案,例如网页抓取?

Huz*_*ama 1

为了能够使用 python 代码从 Facebook 提取数据,您需要在 Facebook 上注册为开发人员,然后拥有访问令牌。以下是它的步骤。

\n\n
\n

转到链接developers.facebook.com,在那里创建一个帐户。转至\n链接developers.facebook.com/tools/explorer。转到右上角的 \xe2\x80\x9cMy apps\xe2\x80\x9d 下拉菜单,然后选择 \xe2\x80\x9cadd 一个新应用\xe2\x80\x9d。选择显示名称和类别,然后\xe2\x80\x9c创建应用程序 ID\xe2\x80\x9d。再次返回\n同一链接developers.facebook.com/tools/explorer。您将在右上角的 \xe2\x80\x9cMy Apps\xe2\x80\x9d 下面看到\n \xe2\x80\x9cGraph API Explorer\xe2\x80\x9d。从\n \xe2\x80\x9cGraph API Explorer\xe2\x80\x9d 下拉列表中,选择您的应用程序。然后,选择 \xe2\x80\x9cGet\n Token\xe2\x80\x9d。从此下拉列表中,选择 \xe2\x80\x9c获取用户访问令牌\xe2\x80\x9d。从出现的菜单中选择\n 权限,然后选择\xe2\x80\x9c获取访问\n 令牌。\xe2\x80\x9d 转至链接developers.facebook.com/tools/accesstoken。选择与\xe2\x80\x9c用户令牌\xe2\x80\x9d对应的\n \xe2\x80\x9cDebug\xe2\x80\x9d。转至 \xe2\x80\x9cExtend Token Access\xe2\x80\x9d。\n 这将确保您的令牌不会每两个小时过期。

\n
\n\n

用于访问 Facebook 公共数据的 Python 代码:\n如果想要收集任何公开可用的数据,请访问链接https://developers.facebook.com/docs/graph-api 。请参阅https://developers.facebook.com/docs/graph-api/reference/v2.7/。从此文档中,选择要从中提取数据的任何字段,例如 \xe2\x80\x9cgroups\xe2\x80\x9d 或 \xe2\x80\x9cpages\xe2\x80\x9d 等。转到代码示例选择这些后,然后选择 \xe2\x80\x9cfacebook graph api\xe2\x80\x9d,您将获得有关如何提取信息的提示。本博客主要是获取事件数据。\n首先导入 \xe2\x80\x98urllib3\xe2\x80\x99, \xe2\x80\x98facebook\xe2\x80\x99, \xe2\x80\x98requests\xe2\ x80\x99(如果它们已经可用)。如果没有,请下载这些库。定义一个变量令牌并将其值设置为上面的 \xe2\x80\x9cUser Access Token\xe2\x80\x9d。

\n\n
token= \xe2\x80\x98aiufniqaefncqiuhfencioaeusKJBNfljabicnlkjshniuwnscslkjjndfi\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取事件列表:\n现在要查找任何搜索词 \xe2\x80\x9cPoetry\xe2\x80\x9d 的事件信息,并将这些事件\xe2\x80\x99 数量限制为 10000:

\n\n
graph = facebook.GraphAPI(access_token=token, version = 2.7)\nevents = graph.request(\xe2\x80\x98/search?q=Poetry&type=event&limit=10000\xe2\x80\x99)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将给出在 Facebook 上创建的所有事件的字典,其名称中包含字符串 \xe2\x80\x9cPoetry\xe2\x80\x9d 。要获取事件列表,请执行以下操作:

\n\n
eventList = events[\xe2\x80\x98data\xe2\x80\x99]\n
Run Code Online (Sandbox Code Playgroud)\n\n

从上面提取的事件列表中提取事件的所有信息:\n通过以下方式获取列表中第一个事件的 EventID

\n\n
eventid = eventList[1][\xe2\x80\x98id\xe2\x80\x99]\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于此 EventID,获取所有信息并设置一些稍后将使用的变量:

\n\n
event1=graph.get_object(id=eventid,fields=\xe2\x80\x99attending_count,can_guests_invite,category,cover,declined_count,description,end_time,guest_list_enabled,interested_count,is_canceled,is_page_owned,is_viewer_admin,maybe_count,noreply_count,owner,parent_group,place,ticket_uri,timezone,type,updated_time\xe2\x80\x99)\nattenderscount = event1[\xe2\x80\x98attending_count\xe2\x80\x99]\ndeclinerscount = event1[\xe2\x80\x98declined_count\xe2\x80\x99]\ninterestedcount = event1[\xe2\x80\x98interested_count\xe2\x80\x99]\nmaybecount = event1[\xe2\x80\x98maybe_count\xe2\x80\x99]\nnoreplycount = event1[\xe2\x80\x98noreply_count\xe2\x80\x99]\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取所有参加活动的人员列表并将响应转换为 json 格式:

\n\n
attenders = requests.get(\xe2\x80\x9chttps://graph.facebook.com/v2.7/"+eventid+"/attending? \naccess_token="+token+\xe2\x80\x9d&limit=\xe2\x80\x9d+str(attenderscount)) \nattenders_json = attenders.json()\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取活动的管理员:

\n\n
admins = requests.get(\xe2\x80\x9chttps://graph.facebook.com/v2.7/"+eventid+"/admins? \naccess_token="+token)\nadmins_json = admins.json()\n
Run Code Online (Sandbox Code Playgroud)\n\n

同样,如果需要,您可以提取其他信息,例如该活动的照片/视频/提要。\n转到https://developers.facebook.com/docs/graph-api/reference/event/并查看 \xe2\x80文档中的 \x9cEdges\xe2\x80\x9d 部分。

\n