2016-03-17 1 views
1

Предположим, у меня есть URL следующим образом:Split название часть URL в отдельной колонке - Python

http://sitename.com/pathname?title=moviename&url=VIDEO_URL 

Я хочу, чтобы разобрать этот URL, чтобы получить название часть и часть URL-адреса в одиночку отдельно.

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

from urlparse import urlparse 
q = urlparse('http://sitename.com/pathname?title=moviename&url=VIDEO_URL') 

После того как я делаю это, я получаю следующий результат,

q 
ParseResult(scheme='http', netloc='sitename.com', path='/pathname', params='', query='title=moviename&url=VIDEO_URL', fragment='') 

и q.query имеет,

'title=moviename&url=VIDEO_URL' 

Я не в состоянии используйте q.query.title или q.query.url здесь. Есть ли способ получить доступ к этому? Я хотел бы разделить URL-адрес и заголовок отдельно на отдельные столбцы. Можем ли мы это сделать, или мы можем написать метод подстроки, который будет проверять, начиная с «title» и заканчивая «&» и разделить его?

Благодаря

+0

Попробуйте: q.query.split ('&') – avip

ответ

7

Здесь вы можете использовать urlparse.parse_qs, чтобы сделать словарь параметров.

from urlparse import urlparse, parse_qs 
q = urlparse('http://sitename.com/pathname?title=moviename&url=VIDEO_URL') 
qs = parse_qs(q.query) 
print qs["title"] # moviename 
print qs["url"] # VIDEO_URL 

Это самый надежный способ для анализа параметров URL-адрес в: гораздо лучше, чем split.

0

Вы делаете это правильно, это просто, что стандартный URL состоит из:

<SCHEME>://<NETLOC>/<PATH>?<QUERY> 

так, что вы хотите, чтобы извлечь детали из запроса, чтобы разделить строку, так, если вам нравится грязный путь:

>>> data = dict(item.split('=') for item in q.query.split('&')) 
>>> data 
{'url': 'VIDEO_URL', 'title': 'moviename'} 
>>> print(data['url']) 

и там у вас есть свой адрес! Это очень простая и каноническая версия того, что предлагает библиотека urlparse через parse_qsl() method. Этот метод также преобразует + в пробелы, обрабатывает ';' а также & и не указывается URL-адрес.

Так использовать urlparse в parse_qsl функцию, все, что вам нужно сделать, это:

>> data =urlparse.parse_qsl(q.query) 
{'url': 'VIDEO_URL', 'title': 'moviename'} 
>>> print(data['url']) 

N.B .: это НЕ безопаснее использовать parse_qsl, чем метод split(), но более НАДЕЖНЫЙ. Основное различие заключается в том, что parse_qsl будет работать со всеми возможными вариантами использования запросов, как определено RFC, тогда как метод split() работает с одним случаем.

-1

Чтобы получить только параметры запроса, разделенные на '&' вы можете использовать:

q.query.split('&')

Или, чтобы получить пар параметров/значение, которое вы можете использовать:

args = [tuple(arg.split('=')) for arg in q.query.split('&')]

1

urlparse может проанализировать URL-адрес, получить query и разобрать, что:

>>> import urlparse 
>>> url = 'http://sitename.com/pathname?title=moviename&url=VIDEO_URL' 
>>> urlparse.parse_qs(urlparse.urlparse(url).query) 
{'title': ['moviename'], 'url': ['VIDEO_URL']} 

В качестве параметра строки запроса может появляться несколько раз, словарь содержит список найденных значений (даже при наличии найдено только одно значения.)

0

Этих ответов пятна на для разбора строки запроса. Для того, чтобы пойти на шаг дальше и использовать точечную нотацию, также см Convert Python dict to object?

from collections import namedtuple 
QS = namedtuple('QS', qs.keys()) 
dotted_qs = QS(**qs) 
dotted_qs.url #['moviename'] 

Обратите внимание, что в dict, что возвращается из parse_qs может быть многозначным, поэтому тип списка возвращение dotted.url. Вы можете свернуть его в одно значение с Dict понимания или parse_qsl:

qs = {k: v[0] for k, v in q.query.items()} 

Или ...

qs = dict(urlparse.parse_qsl(q.query.items())) 

Надежда, что помогает.

 Смежные вопросы

  • Нет связанных вопросов^_^