2016-10-12 4 views
2

개인 프로젝트의 경우 요청 및 BeautifulSoup을 사용하여 페이스 북에서 사용자의 전체 친구 목록을 얻으려고합니다. 그러나 메인 프렌드 페이지는 20 개만 표시되고, 나머지는 스크롤하면 Ajax가로드됩니다. 그것은 수동으로 전송하는 등의 __dyn, cursor, collection_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

페이스 북의 ToS는 당신이하려는 일을 금지합니다. – CBroe

답변

0

이 글을 쓰는 페이지를 분석하여이 정보를 추출 할 수 있습니다 :) 달성하기 위해 다른 방법을 포함하여 이해할 수있을 것이다 :

내 현재 코드는 이것이다 앞의 ajax 응답을 구문 분석하여 후자의 페이지에 대한 다음 커서를 가져옵니다. 그러나 페이 스북이 정기적으로 백엔드를 업데이트하므로 selenium to drive a Chrome headless browser을 사용하여 페이지를 스크롤 한 다음 결과 HTML을 구문 분석하여보다 안정적인 결과를 얻었습니다.

관련 문제