获取facebook中的朋友列表

时间:2013-11-18 16:40:50

标签: python facebook twitter webpage web-crawler

我只是Python的初学者,所以我对此并不了解。

对于我的研究项目,我必须通过使用Python抓取网页来获取Facebook和Twitter用户的朋友列表(已定义)。

我不知道如何开始像开户,然后去朋友,保存其网页,然后转到另一个网页,并做同样的事情。 谁能告诉我怎么做?

3 个答案:

答案 0 :(得分:0)

使用Google API。

https://towardsdatascience.com/how-to-use-facebook-graph-api-and-extract-data-using-python-1839e19d6999

或将此链接用于代码

https://codereview.stackexchange.com/questions/167486/parser-for-facebook-friend-list

您可以使用此Python代码对于该任务,请从上方链接获取...

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class FacebookCrawler:
    LOGIN_URL = 'https://www.facebook.com/login.php?login_attempt=1&lwv=111'

    def __init__(self, login, password):
        chrome_options = webdriver.ChromeOptions()
        prefs = {"profile.default_content_setting_values.notifications": 2}
        chrome_options.add_experimental_option("prefs", prefs)

        self.driver = webdriver.Chrome(chrome_options=chrome_options)
        self.wait = WebDriverWait(self.driver, 10)

        self.login(login, password)

    def login(self, login, password):
        self.driver.get(self.LOGIN_URL)

        # wait for the login page to load
        self.wait.until(EC.visibility_of_element_located((By.ID, "email")))

        self.driver.find_element_by_id('email').send_keys(login)
        self.driver.find_element_by_id('pass').send_keys(password)
        self.driver.find_element_by_id('loginbutton').click()

        # wait for the main page to load
        self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a#findFriendsNav")))

    def _get_friends_list(self):
        return self.driver.find_elements_by_css_selector(".friendBrowserNameTitle > a")

    def get_friends(self):
        # navigate to "friends" page
        self.driver.find_element_by_css_selector("a#findFriendsNav").click()

        # continuous scroll until no more new friends loaded
        num_of_loaded_friends = len(self._get_friends_list())
        while True:
            self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            try:
                self.wait.until(lambda driver: len(self._get_friends_list()) > num_of_loaded_friends)
                num_of_loaded_friends = len(self._get_friends_list())
            except TimeoutException:
                break  # no more friends loaded

        return [friend.text for friend in self._get_friends_list()]


if __name__ == '__main__':
    crawler = FacebookCrawler(login='login', password='password')

    for friend in crawler.get_friends():
        print(friend)

答案 1 :(得分:0)

只有在Facebook批准您的网站访问此数据的情况下,您才可以使用Facebook的Graph API来获取授予您网站许可的人的朋友列表(您需要request permission)。我认为获得个人网站批准的机会不是很高。

获取此数据的另一种方法是通过自动代码或应用程序爬行朋友列表。为此工作:

  • 该人应该是您在Facebook上的朋友
  • 该人的朋友列表应该向朋友开放(某些人将隐私设置更改为“仅我”)
  • 您需要他们的Facebook profile URLs

如果所有设置均已设置,则搜寻器将一个一个地访问个人资料URL,并访问朋友列表以收集数据。

请注意,在Facebook上爬网数据可能会导致legal issues,具体取决于您的住所。

答案 2 :(得分:-2)

您想首先查看requests库。