Разрезание URL с Python

Чтобы получить относительный путь между путями, вы можете использовать метод relativize().

Таким образом, вы должны быть в состоянии сделать это, как только вы нашли базовый путь, который - если вы его еще не знаете - можно было бы сделать, перебирая родителей (используя getParent()), пока вы не найдете его ( отметив getFilename()) или попав в корень. Тогда это должно быть так же просто, как parentPath.relativize(path).

8
задан mlissner 1 August 2014 в 13:49
поделиться

9 ответов

Используйте urlparse модуль. Проверьте эту функцию:

import urlparse

def process_url(url, keep_params=('CONTENT_ITEM_ID=',)):
    parsed= urlparse.urlsplit(url)
    filtered_query= '&'.join(
        qry_item
        for qry_item in parsed.query.split('&')
        if qry_item.startswith(keep_params))
    return urlparse.urlunsplit(parsed[:3] + (filtered_query,) + parsed[4:])

В Вашем примере:

>>> process_url(a)
'http://www.domainname.com/page?CONTENT_ITEM_ID=1234'

Эта функция имеет добавленную премию, которую легче использовать, если Вы решаете, что также хотите еще некоторые параметры запроса, или если порядок параметров не фиксируется, как в:

>>> url='http://www.domainname.com/page?other_value=xx&param3&CONTENT_ITEM_ID=1234&param1'
>>> process_url(url, ('CONTENT_ITEM_ID', 'other_value'))
'http://www.domainname.com/page?other_value=xx&CONTENT_ITEM_ID=1234'
14
ответ дан 5 December 2019 в 07:14
поделиться

Быстрое и грязное решение - это:

>>> "http://something.com/page?CONTENT_ITEM_ID=1234&param3".split("&")[0]
'http://something.com/page?CONTENT_ITEM_ID=1234'
4
ответ дан 5 December 2019 в 07:14
поделиться

Другая опция состояла бы в том, чтобы использовать функцию разделения, с и в качестве параметра. Тем путем Вы извлекли бы и базовый URL и оба параметра.

   url.split("&") 

возвращает список с

  ['http://www.domainname.com/page?CONTENT_ITEM_ID=1234', 'param2', 'param3']
3
ответ дан 5 December 2019 в 07:14
поделиться
import re
url = 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3'
m = re.search('(.*?)&', url)
print m.group(1)
0
ответ дан 5 December 2019 в 07:14
поделиться

URL Parsin никогда не как простой я, это, кажется, вот почему существует urlparse и urllib модули.

НАПРИМЕР:

import urllib
url ="http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3"
query = urllib.splitquery(url)
result = "?".join((query[0], query[1].split("&")[0]))
print result
'http://www.domainname.com/page?CONTENT_ITEM_ID=1234'

Это все еще не 100%-й надежный, но намного больше, чем разделение его самостоятельно, потому что существует много допустимого формата ссылки, что Вы и я не знаем и обнаруживаем один день в журналах ошибок.

1
ответ дан 5 December 2019 в 07:14
поделиться

Я понял, что это ниже - то, что я должен был сделать:

url = "http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3"
url = url[: url.find("&")]
print url
'http://www.domainname.com/page?CONTENT_ITEM_ID=1234'
1
ответ дан 5 December 2019 в 07:14
поделиться

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

url = 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3'
parts = url.split('?')
id = dict(i.split('=') for i in parts[1].split('&'))['CONTENT_ITEM_ID']
new_url = parts[0] + '?CONTENT_ITEM_ID=' + id
0
ответ дан 5 December 2019 в 07:14
поделиться

Посмотрите на urllib2 вопрос об имени файла для некоторого обсуждения этой темы.

Также см., что "Python Находит Вопрос" вопросом.

0
ответ дан 5 December 2019 в 07:14
поделиться

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

0
ответ дан 5 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

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