在Python中使用Urlib更新URL中的查询
我有一个从XML文件中解析出来的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
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有用。非常感谢你。