0

我正在尝试使用 urllib 和 urllib2 来检查公共用户配置文件是否存在于各种社交网络中。现在我一直在尝试检查 www.live.com。例如,如果我访问此 url http://spaces.live.com/profile.aspx?mem=Example@hotmail.com,并且 mem 参数的电子邮件存在,它会重定向到此帐户的个人资料,http://profile.live.com/cid-f5ee5e2a441e7771/即使个人资料不公开也是如此。否则账户不存在。

我应该如何使用 URLError (或其他)来检测重定向?有没有更好的方法呢?

编辑:

自行解决!!!

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import urllib2 
from urllib2 import HTTPError, URLError
nick=str(sys.argv[1])
pref_live="http://spaces.live.com/profile.aspx?mem="
suf_live_01="@hotmail.com"
try:  
    f = urllib2.urlopen( pref_live + nick + suf_live_01 )
    print f.read()  
    f.close()  
except HTTPError, e:  
    print "error"  
    print e.code  
except URLError, e:  
    print "error"  
    print e.reason  

如果错误是404,帐户存在,否则(500),它不存在

编辑2:

这是最终代码,谢谢你们的帮助:)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import urllib2 
from urllib2 import HTTPError, URLError
prefix_live="http://spaces.live.com/profile.aspx?mem="
sufix_live=["@hotmail.com","@live.com"]
try:
    nick=str(sys.argv[1])
except:
    print "Username needed"
    print "Usage:"
    print sys.argv[0], "[username]"
    nick=''

def checking():
    for domain in sufix_live:
        try:  
            f = urllib2.urlopen( prefix_live + nick + domain )
            print f.read()    
            f.close()    
        except HTTPError, e:  
            if e.code == 404:
                print 'Yeah! %s%s exists' % (nick, domain) 
            elif e.code == 500:
                print 'Doh! %s%s Does NOT exists'% (nick, domain)
            else:
                print 'other error'
                print e.code
        except URLError, e:     
            print "There was an error"  
            print e.reason    

if nick != '':
    checking()
4

2 回答 2

0

考虑使用机械化模块。

它导出了 urllib2 的接口,还包括很多方便的网站导航(内容解析、表单、重定向、cookie 等)。

于 2011-06-21T15:41:20.530 回答
0

我会添加一条要求澄清的评论和一个代码示例,但是我还不能添加评论。但是,在回答您的问题时,我会在黑暗中猛烈抨击。

如果我们假设你正在做这样的事情:

request = urllib2.Request('http://someurl.com')
response = urllib2.urlopen(request)
if response.geturl() != 'http://someurl.com':
    print "redirected"
else:
    print "not redirected"   

然后在第一个实例中,如果 urllib2 获得重定向代码(例如响应 300),它将为您处理重定向并获取服务器重定向到的 URL。

然后,您可以通过检查 response.geturl() 的值来确定您是否被重定向

于 2011-06-21T15:55:53.660 回答