Как я могу нормализовать URL в Python

Вы можете использовать np.einsum . Чтобы получить v.dot(M) для каждой пары вектор-матрица, используйте np.einsum("...i,...ij", arr_in, matrices). Чтобы получить M.dot(v), используйте np.einsum("...ij,...i", matrices, arr_in)

70
задан Tom Feiner 7 June 2009 в 20:35
поделиться

6 ответов

Взгляните на этот модуль: werkzeug.utils. (теперь в werkzeug.urls)

функция, которую Вы ищете, вызвана "url_fix" и работает как это:

>>> url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)')
'http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29'

Это реализовано в Werkzeug следующим образом:

import urllib
import urlparse

def url_fix(s, charset='utf-8'):
    """Sometimes you get an URL by a user that just isn't a real
    URL because it contains unsafe characters like ' ' and so on.  This
    function can fix some of the problems in a similar way browsers
    handle data entered by the user:

    >>> url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)')
    'http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29'

    :param charset: The target charset for the URL if the url was
                    given as unicode string.
    """
    if isinstance(s, unicode):
        s = s.encode(charset, 'ignore')
    scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
    path = urllib.quote(path, '/%')
    qs = urllib.quote_plus(qs, ':&=')
    return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))
68
ответ дан jstaab 24 November 2019 в 13:18
поделиться
import urlparse, urllib
def myquote(url):
    parts= urlparse.urlparse(url)
    return urlparse.urlunparse(parts[:2] + urllib.quote(parts[2]) + parts[3:])

Это заключает в кавычки только компонент контура.

Иначе, Вы могли сделать: urllib.quote(url, safe=":/")

9
ответ дан tzot 24 November 2019 в 13:18
поделиться

используйте urllib.quote или urllib.quote_plus

От urllib документация :

кавычка (строка [безопасный])

специальные символы Замены в строке с помощью Escape "%xx". Буквы, цифры и символы "_.-" никогда не заключаются в кавычки. Дополнительный безопасный параметр определяет дополнительные символы, которые не должны быть заключены в кавычки - его значение по умолчанию '/'.

Пример: quote('/~connolly/') урожаи '/%7econnolly/'.

quote_plus (строка [безопасный])

Как кавычка (), но также и замены располагает с интервалами знаками "плюс", как требуется для заключения в кавычки значений HTML-формы. Знаков "плюс" в исходной строке оставляют, если они не включены в сейф. Это также не имеет безопасного значения по умолчанию к '/'.

РЕДАКТИРОВАНИЕ: Используя urllib.quote или urllib.quote_plus на целом URL исказит его, как указывает @О¤О–О©О¤О–О™ОџОҐ:

>>> quoted_url = urllib.quote('http://www.example.com/foo goo/bar.html')
>>> quoted_url
'http%3A//www.example.com/foo%20goo/bar.html'
>>> urllib2.urlopen(quoted_url)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python25\lib\urllib2.py", line 124, in urlopen
    return _opener.open(url, data)
  File "c:\python25\lib\urllib2.py", line 373, in open
    protocol = req.get_type()
  File "c:\python25\lib\urllib2.py", line 244, in get_type
    raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: http%3A//www.example.com/foo%20goo/bar.html

@О¤О–О©О¤О–О™ОџОҐ обеспечивает функцию, которая использует urlparse.urlparse и urlparse.urlunparse, чтобы проанализировать URL и только закодировать путь. Это может быть более полезно для Вас, хотя, если Вы создаете URL из известного протокола и хоста, но с подозрительным путем, Вы могли, вероятно, сделать точно также, чтобы избежать urlparse и просто заключить подозрительную часть в кавычки URL, конкатенирующего с известными безопасными частями.

24
ответ дан Blair Conrad 24 November 2019 в 13:18
поделиться

Real fix in Python 2.7 for that problem

Right solution was:

 # percent encode url, fixing lame server errors for e.g, like space
 # within url paths.
 fullurl = quote(fullurl, safe="%/:=&?~#+!$,;'@()*[]")

For more information see Issue918368: "urllib doesn't correct server returned urls"

58
ответ дан 24 November 2019 в 13:18
поделиться

Поскольку эта страница является одним из первых результатов поиска Google по данной теме, я думаю, стоит упомянуть некоторую работу, которая была проделана по нормализации URL-адресов с помощью Python, которая выходит за рамки символов пробела urlencoding. Например, работа с портами по умолчанию, регистром символов, отсутствием косой черты в конце и т. Д.

Когда разрабатывался формат синдикации Atom, было некоторое обсуждение того, как нормализовать URL-адреса в канонический формат; это описано в статье PaceCanonicalIds на вики-странице Atom / Pie. Эта статья предоставляет несколько хороших тестовых примеров.

Я считаю, что одним из результатов этого обсуждения была библиотека Марка Ноттингема urlnorm.py , которую я использовал с хорошими результатами в паре проектов. Однако этот сценарий не работает с URL-адресом, указанным в этом вопросе.

13
ответ дан 24 November 2019 в 13:18
поделиться

К вашему сведению, urlnorm перемещен на github: http://gist.github.com/246089

4
ответ дан 24 November 2019 в 13:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: