2016-10-12 13 views
2

個人的なプロジェクトでは、RequestsとBeautifulSoupを使ってFacebookからユーザーの完全な友だちリストを取得しようとしています。 メインの友人ページは20個だけ表示され、残りのページはスクロールダウンするとAjaxでロードされます。それは手動で送信するには、このような__dyncursorcollection_tokenなどのように、動的に生成されたトークンを再作成することが可能である、PythonリクエストでAjaxを読み込む

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 

私の質問は次のとおりです。

要求URLは次のようなもの(メソッドはGETです)になります私の要求で?それらがどのように生成されるか、またはそれが失われた原因であるかを理解する方法はありますか?

現在のFacebook APIは完全な友達リストの表示をサポートしていません。私はまた、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') 

すべてのヘルプは、この記事の執筆時点では、この:)

+0

Facebook ToSは、あなたがやろうとしていることを禁止します。 – CBroe

答えて

0

を達成するための他の方法を含め、理解されるであろう、あなたはページを解析することによって、この情報を抽出することができますし、先行するAjaxレスポンスを解析して、後のページの次のカーソルを取得します。しかし、Facebookが定期的にバックエンドを更新しているので、selenium to drive a Chrome headless browserを使用してページをスクロールし、結果のHTMLを解析すると、より安定した結果が得られました。

関連する問題