2011-06-21 60 views
0

我正在嘗試使用urllib和urlib2來檢查公共用戶配置文件是否存在於各種社交網絡中。 現在我被困在試圖檢查www.live.com。 如果我訪問例如這個URL http://spaces.live.com/[email protected],並且存在mem參數的電子郵件,它將重定向到此帳戶的個人資料,就像這個http://profile.live.com/cid-f5ee5e2a441e7771/即使該個人資料不公開。否則該帳戶不存在。使用python檢查多個服務中的現有帳戶

我該如何使用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() 

回答

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

+0

沒有收到你自己解決它的更新。 – ashimali

+0

謝謝!你的代碼非常簡單,儘管我可以處理多個錯誤代碼。 無論如何非常感謝你的消化,這對我很快就會有用。 – peluzza

0

考慮使用mechanize模塊。

它導出urllib2的接口,並且還包含了很多方便的東西來瀏覽網站(內容解析,表單,重定向,cookies等)。

+0

的值來確定您是否實際上被重定向了。謝謝!雖然我已經解決了它,但我會仔細看看機械化,看起來更簡單。 – peluzza

相關問題