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

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

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

https://www.facebook.com/ajax/pagelet/generic.php/AllFriendsAppCollectionPagelet?dpr=1&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}&__user=1364274824&__a=1&__dyn=aihaFayfyGmagngDxfIJ3G85oWq2WiWF298yeqrWo8popyUW3F6wAxu13y78awHx24UJi28cWGzEgDKuEjKeCxicxabwTz9UcTCxaFEW58nVV8-cxnxm1typ9Voybx24oqyUf9UgC_UrQ4bBv-2jAxEhw&__af=o&__req=5&__be=-1&__pc=EXP1:DEFAULT&__rev=2677430&__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=1&lwv=110', data=form)
    # Im logged in
    page = S.get('https://www.facebook.com/yoshidakai/friends?source_ref=pb_friends_tl')

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

python,facebook,web-scraping,python-requests,

2

Ответов: 1


0 принят

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

питон, Facebook, веб-очищающий, питон-запросы,
Похожие вопросы