在Python中使用Urlib更新URL中的查询

在Python中使用Urlib更新URL中的查询,python,regex,hash,Python,Regex,Hash,我有一个从XML文件中解析出来的url product_url = urlparse(item.find('product_url').text) 当我使用urlib来分解url时,我得到了这个 ParseResult(scheme='http', netloc='example.com', path='/dynamic', params='', query='t=MD5-YOUR-OAUTH-TOKEN&p=11111111', fragment='') 我需要更新文件 MD5-Y

我有一个从XML文件中解析出来的url

product_url = urlparse(item.find('product_url').text)
当我使用
urlib
来分解url时,我得到了这个

ParseResult(scheme='http', netloc='example.com', path='/dynamic', params='', query='t=MD5-YOUR-OAUTH-TOKEN&p=11111111', fragment='')
我需要更新文件

MD5-YOUR-OAUTH-TOKEN
带有MD5哈希OAUTH键的查询的一部分

我在这个
tokenHashed=encryptMd5Hash(token)

我的目标是在解析后,将哈希插入字符串中以代替
MD5-YOUR-OAUTH-TOKEN
,使整个url成为一个字符串,我可以在其他地方使用。最初,我试图使用regex来实现这一点,但发现了urlib。我找不到它说的做这种事的地方

我使用urlib做这个对吗?如何实现使用哈希标记更新url并将整个url存储在字符串中的目标

所以字符串应该是这样的


newString='1〕http://example.com/dynamic?t=“+tokenHashed+”&p=11112311312

首先要使用
parse_qs
函数将查询字符串解析到字典中:

>>> import urlparse
>>> import urllib
>>> url = 'http://example.com/dynamic?t=MD5-YOUR-OAUTH-TOKEN&p=11111111'
>>> parsed = urlparse.urlparse(url)
>>> parsed
ParseResult(scheme='http', netloc='example.com', path='/dynamic', params='', query='t=MD5-YOUR-OAUTH-TOKEN&p=11111111', fragment='')
>>> qs = urlparse.parse_qs(parsed.query)
>>> qs
{'p': ['11111111'], 't': ['MD5-YOUR-OAUTH-TOKEN']}
>>> 
现在,您可以根据需要修改字典:

>>> qs['t'] = ['tokenHashed']
请注意,因为
parse_qs
为每个查询返回了列表 参数,我们需要用列表替换它们,因为我们将调用
urlencode
接下来使用
doseq=1
处理这些列表

接下来,重新生成查询字符串:

>>> newqs = urllib.urlencode(qs, doseq=1)
>>> newqs
'p=11111111&t=tokenHashed'
然后重新组合URL:

>>> newurl = urlparse.urlunparse(
... [newqs if i == 4 else x for i,x in enumerate(parsed)])
>>> newurl
'http://example.com/dynamic?p=11111111&t=tokenHashed'
该列表仅使用来自的所有值
已解析
但第4项除外,我们将用新查询替换该项
字符串。

首先要使用
parseqs
函数将查询字符串解析到字典中:

>>> import urlparse
>>> import urllib
>>> url = 'http://example.com/dynamic?t=MD5-YOUR-OAUTH-TOKEN&p=11111111'
>>> parsed = urlparse.urlparse(url)
>>> parsed
ParseResult(scheme='http', netloc='example.com', path='/dynamic', params='', query='t=MD5-YOUR-OAUTH-TOKEN&p=11111111', fragment='')
>>> qs = urlparse.parse_qs(parsed.query)
>>> qs
{'p': ['11111111'], 't': ['MD5-YOUR-OAUTH-TOKEN']}
>>> 
现在,您可以根据需要修改字典:

>>> qs['t'] = ['tokenHashed']
请注意,因为
parse_qs
为每个查询返回了列表 参数,我们需要用列表替换它们,因为我们将调用
urlencode
接下来使用
doseq=1
处理这些列表

接下来,重新生成查询字符串:

>>> newqs = urllib.urlencode(qs, doseq=1)
>>> newqs
'p=11111111&t=tokenHashed'
然后重新组合URL:

>>> newurl = urlparse.urlunparse(
... [newqs if i == 4 else x for i,x in enumerate(parsed)])
>>> newurl
'http://example.com/dynamic?p=11111111&t=tokenHashed'
该列表仅使用来自的所有值
已解析
但第4项除外,我们将用新查询替换该项
字符串。

另外,我正在使用Python 2。如果您使用的是Python3,其中一些方法可能已经改变了。是的,我使用的是Python3,但我很高兴能看到一些东西。如果这对你有用的话,我当然可以让它对python3有用。非常感谢。另外,我正在使用Python 2。如果您使用的是Python3,其中一些方法可能已经改变了。是的,我使用的是Python3,但我很高兴能看到一些东西。如果这对你有用的话,我当然可以让它对python3有用。非常感谢你。