Как заменить запрос новым значением в urlparse?

Поэтому у меня есть данные следующим образом:

 item = '//s780.scene7.com/is/image/forever/301596014_001?hei=98&wid=98'

используя модуль urlparse. Как я могу заменить вышеуказанные данные на новый размер, чтобы они выглядели так:

  item = '//s780.scene7.com/is/image/forever/301596014_001?hei=360&wid=360'

4 ответа

Решение

Вот ответ, который по запросу использует urlparse:

import urllib
import urlparse

url = '//s780.scene7.com/is/image/forever/301596014_001?hei=98&wid=98'
parts = urlparse.urlparse(url)
query_dict = urlparse.parse_qs(parts.query)  # {'wid': ['98'], 'hei': ['98']}
query_dict['wid'] = '360'
query_dict['hei'] = '360'
new_parts = list(parts)
new_parts[4] = urllib.urlencode(query_dict)
print urlparse.urlunparse(new_parts)

Мне нравится делать это так, чтобы было легко читать:

      from urllib.parse import urlsplit, urlunsplit

split = urlsplit(url)
new_url = urlunsplit((
    split.scheme,
    split.netloc,
    split.path,
    'hei=360&wid=360',
    None,
))

Если hei и wid всегда равны одному числу, то мы имеем:

 a = item[item.find('=')+1:item.find('&')] #this is the number in url (in your example it is 98
 item.replace(a, '360')   #item.replace(a, NewNumber) 

Надеюсь, поможет:)

Это то, что вы хотите?

item_360 = item.replace("=98","=360")
print item_360
'//s780.scene7.com/is/image/forever/301596014_001?hei=360&wid=360'

Я ставлю "=", чтобы избежать замены числа до (если существует).

Для более сложной замены вы можете взглянуть на регулярное выражение

Итак, если вы не знаете 98Вы можете использовать регулярные выражения:

import re
item_360 = re.sub("=\d+", '=360', item)
Другие вопросы по тегам