Сравнение двух URL-адресов в Python
есть ли стандартный способ сравнить два URL-адреса в Python-который реализует are_url_the_same в этом примере:
url_1 = 'http://www.foo.com/bar?a=b&c=d'
url_2 = 'http://www.foo.com:80/bar?c=d;a=b'
if are_urls_the_same(url_1, url2):
    print "URLs are the same"
то же самое я имею в виду, что они обращаются к одному и тому же ресурсу - поэтому два URL-адреса в Примере одинаковы.
3 ответов
Lib https://github.com/rbaier/urltools
взгляните на мой проект я делаю то же самое
https://github.com/tg123/tao.bb/blob/master/url_normalize.py
вот простой класс, который позволяет сделать это:
if Url(url1) == Url(url2):
    pass
его можно легко обновить как функцию, хотя эти объекты хэшируются, и поэтому вы можете добавить их в кэш с помощью набора или словаря:
from urlparse import urlparse, parse_qsl
from urllib import unquote_plus
class Url(object):
    '''A url object that can be compared with other url orbjects
    without regard to the vagaries of encoding, escaping, and ordering
    of parameters in query strings.'''
    def __init__(self, url):
        parts = urlparse(url)
        _query = frozenset(parse_qsl(parts.query))
        _path = unquote_plus(parts.path)
        parts = parts._replace(query=_query, path=_path)
        self.parts = parts
    def __eq__(self, other):
        return self.parts == other.parts
    def __hash__(self):
        return hash(self.parts)
использовать urlparse и напишите функции сравнения с полями, которые вам нужны
>>> from urlparse import urlparse
>>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
и вы можете сравнить на любом из следующего:
- схема 0 спецификатор схемы URL
- netloc 1 сетевое расположение часть
- путь 2 иерархический путь
- параметры 3 параметры для последнего элемента пути
- запрос 4 компонент запроса
- фрагмент 5 идентификатор фрагмента
- имя пользователя
- пароль
- имя хоста имя хоста (нижний регистр)
- номер порта порта как целое число, если присутствует
