2010-11-28 40 views
7

Je suis intéressé à obtenir le nombre d'amis que chacun de mes amis sur Facebook a. Apparemment, l'API officielle de Facebook ne permet pas d'avoir des amis d'amis, donc je dois contourner cette limitation (quelque peu sensible) d'une manière ou d'une autre. J'ai essayé ce qui suit:Grattez Facebook en Python

import sys 
import urllib, urllib2, cookielib 

username = '[email protected]' 
password = 'mypassword' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'email' : username, 'pass' : password}) 
request = urllib2.Request('https://login.facebook.com/login.php') 
request.add_header('User-Agent','Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101027 Fedora/3.6.12-1.fc14 Firefox/3.6.12') 
opener.open(request, login_data) 
resp = opener.open('http://facebook.com') 
print resp.read() 

mais je finis seulement avec une page captcha. Une idée de la façon dont FB détecte que la requête ne provient pas d'un navigateur "normal"? Je pourrais ajouter une étape supplémentaire et résoudre le captcha, mais cela ajouterait une complexité inutile au programme, donc je préfère l'éviter. Lorsque j'utilise un navigateur Web avec la même chaîne User-Agent, je n'obtiens pas de captcha.

Ou bien quelqu'un a-t-il des idées plus saines sur la façon d'atteindre mon objectif, c'est-à-dire obtenir une liste d'amis d'amis?

+0

Trouver intéressant. Je pensais qu'ils pourraient afficher le captcha par défaut et le cacher ensuite avec JS, mais quand j'essaye de désactiver JS dans FF, cela ne semble pas être le cas. Cependant, pour voir les amis de mon ami, cela semble nécessiter AJAX, ce qui serait également prohibitif. – mpen

Répondre

3

Avez-vous essayé de suivre et de comparer les transactions HTTP avec Fiddler2 ou Wireshark? Fiddler peut même tracer https, tant que votre code client peut être fait pour fonctionner avec de faux certificats.

0

J'ai essayé beaucoup de façons de gratter facebook et la seule façon qui a fonctionné pour moi est:

Pour installer selenium, le plug-in Firefox, le serveur et la bibliothèque cliente de python. Ensuite, avec le plugin firefox, vous pouvez enregistrer les actions que vous faites pour vous connecter et exporter en tant que script Python, vous l'utilisez comme base pour votre travail et cela fonctionnera. Fondamentalement, j'ai ajouté à ce script une requête à mon serveur Web pour rechercher une liste de choses à inspecter sur FB, puis à la fin du script, j'envoie les résultats à mon serveur.

Je ne pouvais pas trouver un moyen de le faire directement à partir de mon serveur avec un simulateur de navigateur comme mécaniser ou autre! Je suppose que cela doit être fait à partir d'un navigateur client.