Изменить параметр URL

1

Как изменить значение параметра url? Без регулярных выражений.

Теперь я пробую это, но это долго:

from urllib.parse import parse_qs, urlencode,  urlsplit
url = 'http://example.com/?page=1&text=test#section'
param, newvalue = 'page', '2'

url, sharp, frag = url.partition('#')
base, q, query = url.partition('?')
query_dict = parse_qs(query)
query_dict[param][0] = newvalue
query_new = urlencode(query_dict, doseq=True)
url_new = f'{base}{q}{query_new}{sharp}{frag}'

Кроме того, я пытался использовать urlsplit:

parsed = urlsplit(url)
query_dict = parse_qs(parsed.query)
query_dict[param][0] = newvalue
query_new = urlencode(query_dict, doseq=True)
parsed.query = query_new
url_new = urlencode(parsed)

Но на urlparsed.query = query_new ошибка AttributeError: can't set attribute.

Теги:
url
urllib

2 ответа

1

Кортежи неизменяемы. Поэтому вы должны заменить его. Здесь _ означает избежать конфликта с полевыми именами._replace

from urllib.parse import parse_qs, urlencode,  urlsplit
url = 'http://example.com/?page=1&text=test#section'
param, newvalue = 'page', '2'
parsed = urlsplit(url)
query_dict = parse_qs(parsed.query)
query_dict[param][0] = newvalue
query_new = urlencode(query_dict, doseq=True)
parsed=parsed._replace(query=query_new)
url_new = (parsed.geturl())
0

Просто используйте urllib для Python 3 (довольно длинный, но гибкий):

from urllib.parse import urlparse, ParseResult, parse_qs, urlencode

u = urlparse('http://example.com/?page=1&text=test#section')
params = parse_qs(u.query)
params['page'] = 22  #  change query param here
res = ParseResult(scheme=u.scheme, netloc=u.hostname, path=u.path, params=u.params, query=urlencode(params), fragment=u.fragment)
print (res.geturl())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню