Функция в Python для очистки и нормализации URL - PullRequest
3 голосов
/ 10 марта 2011

Я использую URL в качестве ключа, поэтому мне нужно, чтобы они были последовательными и чистыми. Мне нужна функция Python, которая возьмет URL-адрес и очистит его, чтобы я мог получить из БД. Например, потребуется следующее:

example.com
example.com/
http://example.com/
http://example.com
http://example.com?
http://example.com/?
http://example.com//

и выведите чистую консистентную версию:

http://example.com/

Я просмотрел std libs и github и не смог найти ничего подобного

Обновление

Я не смог найти библиотеку Python, которая реализует все, что обсуждалось здесь и в RFC:

http://en.wikipedia.org/wiki/URL_normalization

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

Ответы [ 3 ]

8 голосов
/ 10 марта 2011

Взгляните на urlparse.urlparse(). У меня был хороший успех.


note : Этот ответ с 2011 года относится только к Python2. В Python3 модуль urlparse был назван urllib.parse. Соответствующую документацию Python3 для urllib.parse можно найти здесь:

https://docs.python.org/3/library/urllib.parse.html

6 голосов
/ 20 июня 2014

Это сделано в Scrapy :

http://nullege.com/codes/search/scrapy.utils.url.canonicalize_url

Канонизируйте данный URL, применяя следующие процедуры:

  • сортировка аргументов запроса, сначала по ключу, затем по значению
  • процентов кодируют пути и аргументы запроса. символы не ASCII кодируются в процентах с использованием UTF-8 (RFC-3986)
  • нормализует все пробелы (в аргументах запроса) '+' (символ плюс)
  • нормализовать регистр процентного кодирования (% 2f ->% 2F)
  • удалить аргументы запроса с пустыми значениями (если keep_blank_values ​​не имеет значение True)
  • удалить фрагменты (если keep_fragments имеет значение True)
0 голосов
/ 10 марта 2011

Рассматривали ли вы использование регулярных xpressions?Они помогут вам проверить неправильно сформированные URL-адреса.Я использовал это в одном из своих приложений

"^ [, .a-zA-Z0-9] * $"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...