Есть ли предопределенный класс для URL в Python? - PullRequest
10 голосов
/ 30 мая 2011

Я ищу что-то вроде java.net.URL в модулях Python, Django, Zope или где-либо еще в Python. Я хочу это предпочтительно из семантики причина , потому что результат анализа рассматриваемой программы подразумевает, что URL играет в этом существенную роль. Следствием этого является то, что такой класс URL также будет иметь большое практическое применение в этой программе.

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

Я посмотрел на urllib2 и urlparse . urlparse в основном обладает необходимой мне функциональностью, но он не инкапсулирует ее в класс, подобный java.net.URL. Что касается анализа моей программы, она работает в обратном порядке.

Я также изучил исходный код urlparse для классов SplitResult и ParseResult. У них есть некоторые основные функции, и они могут быть использованы для создания подклассов. Но мне придется переписать остальные функции urlparse как методы подкласса.

Я также нашел mxURL - Гибкий тип данных URL для Python . Это очень близко к тому, что я действительно хочу. Только это кажется излишним для моей цели.

Может кто-нибудь предложить другой вариант? Должен ли я продолжить изобретать велосипед?

Мое решение:

Чтобы получить класс URL, я сделал две вещи:

  1. Наследовать от urlparse.ResultMixin.
  2. Определить функцию, которая вызывает только urlparse.urlparse() и преобразует результаты в параметры экземпляра URL.

Ответы [ 3 ]

14 голосов
/ 30 мая 2011

urlparse инкапсулирует URL-адреса в класс, называемый ParseResult, поэтому его можно считать заводской функцией для них.Прямо из документов Python:

>>> urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')

Если вы отчаянно хотите, чтобы класс с именем URL инкапсулировал ваши URL, используйте псевдоним (URL = urlparse.ParseResult) или создайте адаптер.

3 голосов
/ 14 августа 2012

Возможно, вы захотите взглянуть на furl , потому что это может быть ответом на ваши потребности.

0 голосов
/ 16 января 2018

Что мы имеем по состоянию на 2018 год:

Сегодня поддерживается только furl, но его главный недостаток в том, что он изменчив, что, конечно, не поощряет лучшие практики.(Существует хорошая современная справка - pathlib, которая состоит из неизменяемых классов.)

В целом, иметь безболезненный ОО-способ для анализа и построения URL-адресов - это просто.

...