【问题标题】:Want to crawl the user's interest data from Facebook想从 Facebook 抓取用户的兴趣数据
【发布时间】:2017-01-03 07:41:25
【问题描述】:

我是一名学习数据挖掘的学生。我遇到了麻烦。

为了我的分析,我试图抓取用户的个人兴趣和他们最喜欢的电影、音乐等。我不需要他们的真实姓名或任何敏感数据,但似乎我需要获得每个用户的许可才能能够获得这些信息。我认为我可以轻松获得它,因为它们可以通过 Facebook 冲浪访问。

所以我想问的是:

  1. 我可以在未经用户许可的情况下获取用户的兴趣信息吗?

  2. 我是否必须使用 FQL 来抓取这些数据?我的想法正确吗?我正在阅读 Facebook 提供的手册。但是,由于我的英文阅读能力不是很好,所以我没有 100% 的理解力。

感谢您阅读这么糟糕的英语,我希望得到你们的一些提示。

谢谢! :)

【问题讨论】:

    标签: facebook web-crawler


    【解决方案1】:

    Facebook 允许您访问授权您的应用程序的用户的数据和他们的朋友(例如,不是朋友的朋友)的数据。

    一旦用户授权您的应用程序,您就可以访问他的基本信息(如 id、姓名、性别)和他公开的其他数据。 对于其他任何事情,您都必须向用户请求不同的权限,一旦被他授予您就可以访问它。

    您还可以向应用用户询问有关他朋友的权限,如果他授予您这些权限,那么您还可以在 Facebook 上查询他朋友的数据。

    查看permissions documentation,了解您可以访问哪些内容以及您需要申请哪些权限。

    您可以使用 FQL 从 facebook 中提取数据,但您也可以使用 Graph API(或更具体地说:User object)。 例如,要获取登录用户的兴趣,您只需发出 http 请求:

    https://graph.facebook.com/me/interests

    当然,您必须获得 user_interest 权限..

    我建议使用 Graph Api Explorer 来测试图形 API 调用(或事件 FQL 调用),即:User Interests Example

    【讨论】:

    • 感谢您的回答!! :) 我想知道的是我是否需要获得用户的许可。你的回答让我知道我需要这样做。感谢您的回答。但是,如果有人知道未经用户许可的其他方式来获取信息。如果有人能分享他的想法,我会很高兴的。
    • 你知道关于隐私的讨论吗?如果您只能通过 facebook graph api 访问有关用户的信息,那将意味着:没有隐私。您可以阅读here:“Graph API 本身允许您轻松访问有关对象的所有公共信息。要获取有关用户的其他信息,您必须首先获得他们的许可。” - 所以,你可以等别人过来告诉你,但不会发生。
    • 我知道“隐私”的概念。但是,我认为这是可能的,因为我可以通过 Facebook 浏览器轻松访问这些信息......而你的回答告诉我它不是。感谢您的帮助!
    • 您在浏览时看到的内容与您的应用程序能够“看到”的内容不同,如果您想检查一下,请尝试Graph Api Explorer,这就是它的用途。
    【解决方案2】:

    理论上可以,但很难。例如,您可以使用浏览器(例如 python 中的 mechanize)来模拟浏览活动,并保存您正在访问的网页。然后你需要使用一些抓取代码来提取你想要的信息。

    以下机械化 (python) 代码可以帮助您入门。

    import mechanize
    
    br = mechanize.Browser();
    br.addheaders = [('User-Agent', 'Firefox')]#Googlebot
    br.set_handle_equiv(False)
    br.set_handle_redirect(True)
    br.set_handle_robots(False)
    br._factory.is_html = True
    
    br.open('https://login.facebook.com/login.php')
    br.select_form(nr=0)
    br['email']='<your_email>'
    br['pass']='<your_password>'
    r = br.submit();
    
    if r == None:
        print 'Error logging into facebook. '
        sys.exit();
    
    # Save the document to file.
    import os
    uid = '<your_user_id>' # for example abc.xyz
    dir = 'htmls/'
    try:
        os.mkdir(dir);
    except:
        pass
    
    timeline = open(dir + 'timeline.html', 'w')
    htmldoc = ''.join(br.open('https://www.facebook.com/' + uid).read());
    timeline.write(htmldoc);
    # timeline.write(htmldoc.decode('utf-8', 'replace'))
    timeline.close()
    

    HTH, 舒敏

    【讨论】:

    • 如果我们大规模这样做,fb会意识到我们在刮,会阻止我们吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2022-01-13
    • 2021-04-25
    相关资源
    最近更新 更多