In [1]:
import urllib.parse

In [2]:
url = 'https://www.google.co.jp/search?q=%E6%A1%9C&tbm=isch'

In [3]:
print(urllib.parse.urlparse(url))


ParseResult(scheme='https', netloc='www.google.co.jp', path='/search', params='', query='q=%E6%A1%9C&tbm=isch', fragment='')

In [4]:
qs = urllib.parse.urlparse(url).query

In [5]:
print(qs)


q=%E6%A1%9C&tbm=isch

In [6]:
print(type(qs))


<class 'str'>

In [7]:
qs_d = urllib.parse.parse_qs(qs)

In [8]:
print(qs_d)


{'q': ['桜'], 'tbm': ['isch']}

In [9]:
print(type(qs_d))


<class 'dict'>

In [10]:
print(qs_d['q'])


['桜']

In [11]:
print(type(qs_d['q']))


<class 'list'>

In [12]:
print(qs_d['q'][0])



In [13]:
print(type(qs_d['q'][0]))


<class 'str'>

In [14]:
qs_l = urllib.parse.parse_qsl(qs)

In [15]:
print(qs_l)


[('q', '桜'), ('tbm', 'isch')]

In [16]:
print(type(qs_l))


<class 'list'>

In [17]:
print(qs_l[0])


('q', '桜')

In [18]:
print(type(qs_l[0]))


<class 'tuple'>

In [19]:
print(qs_l[0][1])



In [20]:
print(type(qs_l[0][1]))


<class 'str'>

In [21]:
d = {'key1': 'value / one', 'key2': 'バリュー2'}

In [22]:
d_qs = urllib.parse.urlencode(d)

In [23]:
print(d_qs)


key1=value+%2F+one&key2=%E3%83%90%E3%83%AA%E3%83%A5%E3%83%BC2

In [24]:
print(type(d_qs))


<class 'str'>

In [25]:
l = [('key1', 'value / one'), ('key2', 'バリュー2')]

In [26]:
l_qs = urllib.parse.urlencode(l)

In [27]:
print(l_qs)


key1=value+%2F+one&key2=%E3%83%90%E3%83%AA%E3%83%A5%E3%83%BC2

In [28]:
print(type(l_qs))


<class 'str'>

In [29]:
print(urllib.parse.urlencode(d))


key1=value+%2F+one&key2=%E3%83%90%E3%83%AA%E3%83%A5%E3%83%BC2

In [30]:
print(urllib.parse.urlencode(d, quote_via=urllib.parse.quote))


key1=value%20%2F%20one&key2=%E3%83%90%E3%83%AA%E3%83%A5%E3%83%BC2

In [31]:
print(urllib.parse.urlencode(d, safe='/'))


key1=value+/+one&key2=%E3%83%90%E3%83%AA%E3%83%A5%E3%83%BC2

In [32]:
print(urllib.parse.urlencode(d, safe='/', quote_via=urllib.parse.quote))


key1=value%20/%20one&key2=%E3%83%90%E3%83%AA%E3%83%A5%E3%83%BC2

In [33]:
print(qs_d)


{'q': ['桜'], 'tbm': ['isch']}

In [34]:
print(urllib.parse.urlencode(qs_d))


q=%5B%27%E6%A1%9C%27%5D&tbm=%5B%27isch%27%5D

In [35]:
print(urllib.parse.urlencode(qs_d, doseq=True))


q=%E6%A1%9C&tbm=isch

In [36]:
print(url)


https://www.google.co.jp/search?q=%E6%A1%9C&tbm=isch

In [37]:
print(url.replace('isch', 'vid'))


https://www.google.co.jp/search?q=%E6%A1%9C&tbm=vid

In [38]:
def update_query(url, key, org_val, new_val):
    pr = urllib.parse.urlparse(url)
    d = urllib.parse.parse_qs(pr.query)
    l = d.get(key)
    if l:
        d[key] = [new_val if v == org_val else v for v in l]
    else:
        d[key] = new_val
    return urllib.parse.urlunparse(pr._replace(query=urllib.parse.urlencode(d, doseq=True)))

In [39]:
print(update_query(url, 'tbm', 'isch', 'vid'))


https://www.google.co.jp/search?q=%E6%A1%9C&tbm=vid

In [40]:
print(update_query(url, 'q', '桜', '梅'))


https://www.google.co.jp/search?q=%E6%A2%85&tbm=isch

In [41]:
print(update_query(url, 'new-key', 'xxx', 'yyy'))


https://www.google.co.jp/search?q=%E6%A1%9C&tbm=isch&new-key=yyy

In [42]:
def remove_query(url, key):
    pr = urllib.parse.urlparse(url)
    d = urllib.parse.parse_qs(pr.query)
    d.pop(key, None)
    return urllib.parse.urlunparse(pr._replace(query=urllib.parse.urlencode(d, doseq=True)))

In [43]:
print(remove_query(url, 'tbm'))


https://www.google.co.jp/search?q=%E6%A1%9C

In [44]:
print(remove_query(url, 'new-key'))


https://www.google.co.jp/search?q=%E6%A1%9C&tbm=isch

In [45]:
def remove_all_query(url):
    return urllib.parse.urlunparse(urllib.parse.urlparse(url)._replace(query=None))

In [46]:
print(remove_all_query(url))


https://www.google.co.jp/search