【问题标题】:python: encode a url with percentage signs? [duplicate]python:用百分号编码一个网址? [复制]
【发布时间】: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', '')

这导致用百分号替换所有内容。

这样做的正确方法是什么?

【问题讨论】:

    标签: python


    【解决方案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
    

    另见:

    【讨论】:

    • 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://。第二个参数是不被替换的安全字符列表,默认为'/',在你的情况下可以。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多