2014-09-10 1 views
0

Я новичок в программировании и Python.Как управлять URL-строкой, чтобы извлечь одну часть?

фон

Моя программа принимает URL. Я хочу извлечь имя пользователя из URL-адреса.

Имя пользователя является субдоменом. Если субдомен является «www», имя пользователя должно быть основной частью домена. Остальная часть домена следует отказаться (например, «.com /», «.org /».)

Я попытался следующие:

def get_username_from_url(url): 
    if url.startswith(r'http://www.'): 
     user = url.replace(r'http://www.', '', 1) 
     user = user.split('.')[0] 
     return user 
    elif url.startswith(r'http://'): 
     user = url.replace(r'http://', '', 1) 
     user = user.split('.')[0] 
     return user 

easy_url = "http://www.httpwwwweirdusername.com/"  
hard_url = "http://httpwwwweirdusername.blogger.com/" 

print get_username_from_url(easy_url) 
# output = httpwwwweirdusername (good! expected.) 

print get_username_from_url(hard_url) 
# output = weirdusername (bad! username should = httpwwwweirdusername) 

Я пробовал много других комбинаций с использованием strip() , split() и replace().

Не могли бы вы посоветовать мне, как решить эту относительно простую проблему?

+0

Не удается воспроизвести – vaultah

+0

вы пробовали, используя шаблоны строк и StrPos() ... кажется, что они могут помочь вам в вашей проблемы –

+1

Ваш код прекрасно работает меня. – Zenadix

ответ

0

Можно сделать это с регулярными выражениями (вероятно, может изменить регулярное выражение, чтобы быть более точный/эффективный).

import re 
url_pattern = re.compile(r'.*/(?:www.)?(\w+)') 
def get_username_from_url(url): 
    match = re.match(url_pattern, url) 
    if match: 
     return match.group(1) 

easy_url = "http://www.httpwwwweirdusername.com/" 
hard_url = "http://httpwwwweirdusername.blogger.com/" 

print get_username_from_url(easy_url) 
print get_username_from_url(hard_url) 

Который дает нам:

httpwwwweirdusername 
httpwwwweirdusername 
4

Существует модуль под названием urlparse, который специально для выполнения этой задачи:

>>> from urlparse import urlparse 
>>> url = "http://httpwwwweirdusername.blogger.com/" 
>>> urlparse(url).hostname.split('.')[0] 
'httpwwwweirdusername' 

В случае http://www.httpwwwweirdusername.com/ было бы выход www, который не требуется. Есть обходные пути, чтобы игнорировать www части, как, например, получить первый элемент из расщепленного hostname, который не равен www:

>>> from urlparse import urlparse 

>>> url = "http://www.httpwwwweirdusername.com/" 
>>> next(item for item in urlparse(url).hostname.split('.') if item != 'www') 
'httpwwwweirdusername' 

>>> url = "http://httpwwwweirdusername.blogger.com/" 
>>> next(item for item in urlparse(url).hostname.split('.') if item != 'www') 
'httpwwwweirdusername' 
Смежные вопросы