Очистите Facebook в Python

Мне интересно узнать, сколько друзей у каждого из моих друзей на Facebook. Судя по всему, официальный Facebook API не позволяет получить друзей друзей, поэтому мне нужно как-то обойти это (несколько разумное) ограничение. Я пробовал следующее:

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()

но я получаю только страницу с капчей. Есть идеи, как FB определяет, что запрос не из «обычного» браузера? Я мог бы добавить дополнительный шаг и решить капчу, но это добавило бы ненужной сложности программе, поэтому я предпочел бы этого не делать. Когда я использую веб-браузер с той же строкой User-Agent, я не получаю капчу.

В качестве альтернативы, есть ли у кого-нибудь более разумные идеи о том, как выполнить мою цель, т.е. получить список друзей друзей?


person pafcu    schedule 28.11.2010    source источник
comment
Интересная находка. Я думал, что они могут отображать капчу по умолчанию, а затем скрывать ее с помощью JS, но когда я пытаюсь отключить JS в FF, это не так. Однако для просмотра друзей моего друга, похоже, требуется AJAX, что также было бы непозволительно.   -  person mpen    schedule 28.11.2010


Ответы (2)


Пробовали ли вы отслеживать и сравнивать HTTP-транзакции с помощью Fiddler2 или Wireshark? Fiddler может даже отслеживать https, если ваш клиентский код может работать с фиктивными сертификатами.

person Marcelo Cantos    schedule 28.11.2010

Я пробовал много способов очистить Facebook, и единственный способ, который сработал для меня, это:

Чтобы установить selenium , подключаемый модуль firefox, сервер и клиентскую библиотеку python. Затем с помощью плагина firefox вы можете записывать действия, которые вы выполняете для входа и экспорта в виде скрипта Python, вы используете его в качестве основы для своей работы, и он будет работать. По сути, я добавил в этот сценарий запрос к моему веб-серверу, чтобы получить список вещей для проверки на FB, а затем в конце сценария я отправляю результаты обратно на свой сервер.

Я НЕ мог найти способ сделать это прямо с моего сервера с помощью симулятора браузера, такого как mechanize или что-то еще! Я думаю, это нужно сделать из клиентского браузера.

person dwarfy    schedule 07.05.2011