2009-10-14 56 views
4

现在,我可以使用urllib2来抓取常规页面。如何使用Python登录到Facebook/Myspace并抓取内容?

request = urllib2.Request('http://stackoverflow.com') 
request.add_header('User-Agent',random.choice(agents)) 
response = urllib2.urlopen(request) 
htmlSource = response.read() 
print htmlSource 

但是...我想模拟POST(或假会话)?这样我就可以进入Facebook并抓取。我怎么做?

回答

7

您需要在登录时将您选择的站点的Cookie发送给您;这就是保持你的会话。随着urllib2,您可以通过创建一个支持cookie的处理的开瓶器对象做到这一点:

import urllib2, cookielib 
jar = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) 

有了这个揭幕战中,你可以做的请求,GET或POST:

content = opener.open(urllib2.Request(
    "http://social.netwo.rk/login", 
    "user=foo&pass=bar") 
).read() 

由于有第二参数urllib2.Request,它将是一个POST请求 - 如果这不是,你最终得到一个GET请求。您还可以通过.add_header或通过向构造函数传递一个字典(或元组元组)来添加HTTP标头。阅读urllib2.Request的手册以获取更多信息。

这应该让你开始!祝你好运。

(PS:如果你不需要读取到的Cookie访问,你可以省略创建cookie罐自己;在HTTPCookieProcessor会为你做它。)

1

您可以通过首先使用urllib对数据进行编码,然后使用urllib2发送请求来完成POST请求,就像您现在正在做的那样。

这在this article中有解释。

4

Mechanize库是一个简单的方法来在Python中模拟浏览器。

1

或者您可以使用PyCurl作为选择...