Загрузка Ajax с помощью запросов Python

#python #facebook #web-scraping #python-requests

#python #Facebook #очистка веб-страниц #python-запросы

Вопрос:

Для личного проекта я пытаюсь получить полный список друзей пользователя (пока что меня) из Facebook, используя Requests и BeautifulSoup. Однако на главной странице друзей отображается только 20, а остальные загружаются с помощью Ajax при прокрутке вниз.

URL-адрес запроса выглядит примерно так (метод GET):

 https://www.facebook.com/ajax/pagelet/generic.php/AllFriendsAppCollectionPagelet?dpr=1amp;data={"collection_token":"1244314824:2256358349:2","cursor":"MDpub3Rfc3RydWN0dXJlZDoxMzU2MDIxMTkw","tab_key":"friends","profile_id":1244214828,"overview":false,"ftid":null,"order":null,"sk":"friends","importer_state":null}amp;__user=1364274824amp;__a=1amp;__dyn=aihaFayfyGmagngDxfIJ3G85oWq2WiWF298yeqrWo8popyUW3F6wAxu13y78awHx24UJi28cWGzEgDKuEjKeCxicxabwTz9UcTCxaFEW58nVV8-cxnxm1typ9Voybx24oqyUf9UgC_UrQ4bBv-2jAxEhwamp;__af=oamp;__req=5amp;__be=-1amp;__pc=EXP1:DEFAULTamp;__rev=2677430amp;__srp_t=1474288976
  

Мой вопрос в том, возможно ли воссоздать динамически генерируемые токены __dyn cursor , такие как , и т.д. collection_token отправить вручную в моем запросе? Есть ли какой-нибудь способ выяснить, как они генерируются, или это безнадежное дело?

Я знаю, что текущий API Facebook не поддерживает просмотр полного списка друзей. Я также знаю, что могу сделать это с помощью Selenium или какого-либо другого симулятора браузера, но это кажется слишком медленным, в идеале я хочу очистить тысячи списков друзей (пользователей, чьи списки друзей являются общедоступными) в разумные сроки.

Мой текущий код таков:

 import requests
from bs4 import BeautifulSoup
with requests.Session() as S:
    requests.utils.add_dict_to_cookiejar(S.cookies, {'locale': 'en_US'})
    form = {}
    form['email'] = 'myusername'
    form['pass'] = 'mypassword'
    response = S.post('https://www.facebook.com/login.php?login_attempt=1amp;lwv=110', data=form)
    # Im logged in
    page = S.get('https://www.facebook.com/yoshidakai/friends?source_ref=pb_friends_tl')
  

Любая помощь будет оценена, включая другие методы для достижения этой цели 🙂

Комментарии:

1. TOS Facebook запрещают то, что вы пытаетесь сделать.

Ответ №1:

На момент написания этой статьи вы можете извлечь эту информацию, проанализировав страницу, а затем получить следующий курсор для последних страниц, проанализировав предыдущий ответ ajax. Однако, поскольку Facebook регулярно обновляет свой серверный сервер, у меня были более стабильные результаты, используя selenium для управления браузером Chrome без головы для прокрутки страницы, а затем разбора полученного HTML.