如何在Python中处理它们之间包含空格的链接

时间:2015-10-10 02:48:33

标签: python url request broken-links

我正在尝试从网页中提取链接,然后在我的网络浏览器中打开它们。我的Python程序能够成功提取链接,但有些链接之间有空格,无法使用MyService.getcustomers() .then(function(data) { $scope.customers = data; }) .catch(function(error) { console.log(error.msg); }) 打开。

例如request module它不会使用请求模块打开。但如果我将其转换为example.com/A, B C,它将会打开。在python中有一个简单的方法用example.com/A,%20B%20C填充空格吗?

%20

我想将所有包含空格的链接转换为上述格式。

3 个答案:

答案 0 :(得分:4)

urlencode实际上需要一本字典,例如:

>>> urllib.urlencode({'test':'param'})
'test=param'`

你实际上需要这样的东西:

import urllib
import urlparse

def url_fix(s, charset='utf-8'):
    if isinstance(s, unicode):
        s = s.encode(charset, 'ignore')
    scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
    path = urllib.quote(path, '/%')
    qs = urllib.quote_plus(qs, ':&=')
    return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))

然后:

>>>url_fix('http://example.com/A, B C')    
'http://example.com/A%2C%20B%20C'

取自How can I normalize a URL in python

答案 1 :(得分:1)

使用url encode:

import urllib
urllib.urlencode(yourstring)

答案 2 :(得分:0)

针对@rofls答案的Python 3工作解决方案。

import urllib.parse as urlparse
def url_fix(s):
    scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
    path = urlparse.quote(path, '/%')
    qs = urlparse.quote_plus(qs, ':&=')
    return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))