Использование python для проверки существующих учетных записей в нескольких сервисах - PullRequest
0 голосов
/ 21 июня 2011

Я пытаюсь использовать urllib и urlib2, чтобы проверить, существует ли общедоступный профиль пользователя в различных социальных сетях.Теперь я застрял, пытаясь проверить www.live.com.Например, если я захожу на этот URL http://spaces.live.com/profile.aspx?mem=Example@hotmail.com и электронная почта mem param существует, он перенаправляется в профиль этой учетной записи, например http://profile.live.com/cid-f5ee5e2a441e7771/, даже если профиль не является общедоступным.В противном случае учетная запись не существует.

Как мне использовать URLError (или еще) для обнаружения перенаправления?Есть ли лучший способ сделать это?

РЕДАКТИРОВАТЬ:

Self Solved !!!

#!/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()

Ответы [ 2 ]

0 голосов
/ 21 июня 2011

Я бы добавил комментарий с просьбой дать пояснения и пример кода, но, увы, я пока не могу добавлять комментарии.Однако я отвечу на ваш вопрос в полной темноте.

Если мы предположим, что вы делаете что-то вроде этого:

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 голосов
/ 21 июня 2011

рассмотрите возможность использования модуля mechanize .

Экспортирует интерфейс urllib2, а также включает в себя множество удобных вещей для навигации по веб-сайтам (разбор контента, формы, перенаправления, файлы cookie и т. Д.).

...