python:用百分号编码一个网址? [复制]
Posted
技术标签:
【中文标题】python:用百分号编码一个网址? [复制]【英文标题】:python: encode a url with percentage signs? [duplicate] 【发布时间】:2014-09-17 23:33:42 【问题描述】:我正在尝试转换以下网址
http://www.website.com/search/si/1/doctors/Vancouver, BC
到
http://www.website.com/search/si/1/doctors/Vancouver%2C%20BC
我试过了
urllib.quote('http://www.website.com/search/si/1/doctors/Vancouver, BC', '')
这导致用百分号替换所有内容。
这样做的正确方法是什么?
【问题讨论】:
【参考方案1】:使用 urllib.quote()
作为 url path
保留其他所有内容:
from urllib import quote
from urlparse import urlparse, urlunparse
url = "http://www.website.com/search/si/1/doctors/Vancouver, BC"
scheme, netloc, path, params, query, fragment = urlparse(url)
path = quote(path)
print urlunparse((scheme, netloc, path, params, query, fragment))
打印:
http://www.website.com/search/si/1/doctors/Vancouver%2C%20BC
另见:
How can I normalize a URL in python【讨论】:
omg....终于有真正的答案了 不,不是一个真正的答案:假设您在查询字符串中有一个:
:'http://www.website.com/Vancouver:BC'
。
@AlexanderGelbukh 好点,现在呢?
@alecxe 现在完美。我想知道这是否不能用一个函数来完成。
@AlexanderGelbukh 是的,werkzeug
有助于不要在这里重新发明***,请参阅url_fix()
。【参考方案2】:
urllib.quote('www.website.com/search/si/1/doctors/Vancouver, BC')
没有第二个参数并且没有协议部分http://
。第二个参数是不被替换的安全字符列表,默认为'/'
,在你的情况下可以。
【讨论】:
这给了我http%3A//www.website.com/search/si/1/doctors/Vancouver%2C%20BC
您应该使用不带协议部分的路径部分。否则它认为你要获取的是http%3A//www.website.com/search/si/1/doctors/Vancouver%2C%20BC。
您可以使用urlparse将路径与URL分开。
这对你有用:urllib.quote(url, '/:'])
以上是关于python:用百分号编码一个网址? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 python 请求对我的 URL 进行百分比编码?