用Python清理Facebook

用Python清理Facebook,python,facebook,captcha,Python,Facebook,Captcha,我很想知道我的每个朋友在Facebook上的朋友数量。显然,官方的Facebook API不允许获得朋友的朋友,所以我需要以某种方式绕过这个(一些合理的)限制。我尝试了以下方法: import sys import urllib, urllib2, cookielib username = 'me@example.com' password = 'mypassword' cj = cookielib.CookieJar() opener = urllib2.build_opener(urll

我很想知道我的每个朋友在Facebook上的朋友数量。显然,官方的Facebook API不允许获得朋友的朋友,所以我需要以某种方式绕过这个(一些合理的)限制。我尝试了以下方法:

import sys
import urllib, urllib2, cookielib

username = 'me@example.com'
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是如何检测到请求不是来自“正常”浏览器的吗?我可以添加一个额外的步骤来解决验证码问题,但这会给程序增加不必要的复杂性,所以我宁愿避免它。当我使用具有相同用户代理字符串的web浏览器时,我不会得到验证码


或者,是否有人对如何实现我的目标有更明智的想法,即获取朋友的朋友列表?

您是否尝试过将HTTP事务与Fiddler2或Wireshark进行跟踪和比较?Fiddler甚至可以跟踪https,只要你的客户端代码可以使用伪造的证书。

我确实尝试了很多方法来抓取facebook,唯一对我有效的方法是:

要安装,请安装firefox插件、服务器和python客户端库。 然后使用firefox插件,您可以将登录和导出的操作记录为python脚本,您可以将其作为工作的基础,它将起作用。基本上,我在这个脚本中添加了一个对我的Web服务器的请求,请求在FB上检查一个列表,然后在脚本结束时,我将结果发送回我的服务器


我找不到一种方法来直接从我的服务器上用浏览器模拟器像mechanize或其他!我想这需要在客户端浏览器中完成。

有趣的发现。我想他们可能会在默认情况下显示验证码,然后用JS隐藏它,但当我尝试在FF中禁用JS时,情况似乎并非如此。然而,要查看我朋友的朋友,似乎需要AJAX,这也是禁止的。