Python `urlparse`: добавление ключевых слов GET в URL - PullRequest
5 голосов
/ 08 марта 2011

Я делаю это:

urlparse.urljoin('http://example.com/mypage', '?name=joe')

И я получаю это:

'http://example.com/?name=joe'

Пока я хочу получить это:

'http://example.com/mypage?name=joe'

Что такоеЯ делаю не так?

Ответы [ 4 ]

5 голосов
/ 08 марта 2011

Вы можете использовать urlparse.urlunparse:

import urlparse
parsed = list(urlparse.urlparse('http://example.com/mypage'))
parsed[4] = 'name=joe'
urlparse.urlunparse(parsed)
1 голос
/ 08 марта 2011

Я решил это, связав модуль Python 2.6 urlparse с моим проектом.Мне также пришлось связать namedtuple, который был определен в collections, так как urlparse использует его.

1 голос
/ 08 марта 2011

Вы испытываете известную ошибку , которая затрагивает Python 2.4-2.6.

Если вы не можете изменить или исправить свою версию Python, решение @ jd обойдет эту проблему.

Однако, если вам нужно более общее решение, которое работает как стандартный urljoin, вы можете использовать метод-обертку, который реализует обходной путь для этого конкретного варианта использования, и по умолчанию использовать стандартный urljoin() в противном случае.

Например:

import urlparse

def myurljoin(base, url, allow_fragments=True):
    if url[0] != "?": 
        return urlparse.urljoin(base, url, allow_fragments)
    if not allow_fragments: 
        url = url.split("#", 1)[0]
    parsed = list(urlparse.urlparse(base))
    parsed[4] = url[1:] # assign params field
    return urlparse.urlunparse(parsed)
0 голосов
/ 08 марта 2011

Ты уверен? На Python 2.7:

>>> import urlparse
>>> urlparse.urljoin('http://example.com/mypage', '?name=joe')
'http://example.com/mypage?name=joe'
...