2010-11-28 14 views
7

Estoy interesado en obtener la cantidad de amigos que tiene cada uno de mis amigos en Facebook. Aparentemente, la API oficial de Facebook no permite obtener amigos de amigos, así que tengo que evitar esta limitación (algo sensata) de alguna manera. Intenté lo siguiente:Raspar 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() 

pero solo termino con una página de captcha. ¿Alguna idea de cómo FB está detectando que la solicitud no proviene de un navegador "normal"? Podría agregar un paso adicional y resolver el captcha, pero eso añadiría complejidad innecesaria al programa, así que preferiría evitarlo. Cuando uso un navegador web con la misma cadena de User-Agent, no obtengo un captcha.

Alternativamente, ¿alguien tiene alguna idea más clara sobre cómo lograr mi objetivo, es decir, obtener una lista de amigos de amigos?

+0

Interesante encontrar. Pensé que podrían mostrar el captcha por defecto y luego ocultarlo con JS, pero cuando intento desactivar JS en FF, ese no parece ser el caso. Sin embargo, para ver a los amigos de mi amigo parece requerir AJAX, lo que también sería prohibitivo. – mpen

Respuesta

3

¿Ha intentado rastrear y comparar transacciones HTTP con Fiddler2 o Wireshark? Fiddler incluso puede rastrear https, siempre que su código de cliente pueda funcionar con certificados falsos.

0

Yo probé un montón de maneras para raspar facebook y la única manera de que trabajó para mí es:

Para instalar selenium, el plugin de Firefox, el servidor y la biblioteca cliente Python. Luego, con el complemento de Firefox, puede registrar las acciones que realiza para iniciar sesión y exportar como un script de Python, lo usa como base para su trabajo y funcionará. Básicamente agregué a este script una solicitud a mi servidor web para mostrar una lista de cosas para inspeccionar en FB y luego, al final del script, envié los resultados a mi servidor.

¡NO pude encontrar la manera de hacerlo directamente desde mi servidor con un simulador de navegador como mechanize o de lo contrario! Supongo que debe hacerse desde un navegador de cliente.

Cuestiones relacionadas