假设我得到了一个URL。
它可能已经有了GET参数(例如http://example.com/search?q=question
),也可能没有(例如http://example.com/
)。
现在我需要给它添加一些参数,比如{'lang':'en','tag':'python'}
。在第一种情况下,我将使用http://example.com/search?q=question&lang=en&tag=python
,在第二种情况下- http://example.com/search?lang=en&tag=python
。
有什么标准的方法可以做到这一点吗?
发布于 2010-03-24 17:23:16
urllib
和urlparse
模块有一些奇怪的地方。下面是一个有效的示例:
try:
import urlparse
from urllib import urlencode
except: # For Python 3
import urllib.parse as urlparse
from urllib.parse import urlencode
url = "http://stackoverflow.com/search?q=question"
params = {'lang':'en','tag':'python'}
url_parts = list(urlparse.urlparse(url))
query = dict(urlparse.parse_qsl(url_parts[4]))
query.update(params)
url_parts[4] = urlencode(query)
print(urlparse.urlunparse(url_parts))
ParseResult
,urlparse()
,is read-only的结果,我们需要将它转换成list
,然后才能尝试修改它的数据。
发布于 2010-03-24 17:15:15
如果字符串可以包含任意数据(例如,需要对与号、斜杠等字符进行编码),则需要使用URL编码。
查看urllib.urlencode:
>>> import urllib
>>> urllib.urlencode({'lang':'en','tag':'python'})
'lang=en&tag=python'
在python3中:
from urllib import parse
parse.urlencode({'lang':'en','tag':'python'})
发布于 2018-04-22 00:40:26
外包给经过战斗考验的requests library。
这就是我要做的:
from requests.models import PreparedRequest
url = 'http://example.com/search?q=question'
params = {'lang':'en','tag':'python'}
req = PreparedRequest()
req.prepare_url(url, params)
print(req.url)
https://stackoverflow.com/questions/2506379
复制相似问题