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:用百分号编码一个网址? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何对URL字符串进行百分号编码

如何防止 python 请求对我的 URL 进行百分比编码?

百分比编码保留字符

编码解码--url编码解码

如何使用 setStyleSheet 更改 QLabel 小部件的字体大小(百分比)? [复制]

如何计算百分位数与Python / numpy的