Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中处理它们之间包含空格的链接_Python_Url_Request_Broken Links - Fatal编程技术网

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

如何在Python中处理它们之间包含空格的链接,python,url,request,broken-links,Python,Url,Request,Broken Links,我正在尝试从网页中提取链接,然后在我的web浏览器中打开它们。我的Python程序能够成功提取链接,但有些链接之间有空格,无法使用请求模块打开 例如example.com/A,B C它将不会使用请求模块打开。但是如果我把它转换成example.com/A,%20B%20C它就会打开。python中有没有一种简单的方法可以用%20填充空格 `http://example.com/A, B C` ---> `http://example.com/A,%20B%20C` 我想将所有之间有空格的

我正在尝试从网页中提取链接,然后在我的web浏览器中打开它们。我的Python程序能够成功提取链接,但有些链接之间有空格,无法使用
请求模块打开

例如
example.com/A,B C
它将不会使用请求模块打开。但是如果我把它转换成
example.com/A,%20B%20C
它就会打开。python中有没有一种简单的方法可以用
%20
填充空格

`http://example.com/A, B C` ---> `http://example.com/A,%20B%20C`
我想将所有之间有空格的链接转换为上述格式。

使用url编码:

import urllib
urllib.urlencode(yourstring)

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))
然后:


摘自Python3工作解决方案的答案


我收到此错误
TypeError:不是有效的非字符串序列或映射对象
我正在使用类似的
'%20'。join(line.split())
。你认为这是一个好的决定吗?这将处理空格:)但我建议使用上面的代码片段,因为它似乎工作得相当好。http URL以及其他字符列表中也不支持逗号。这似乎处理得很好。是的,我同意你的看法。非常感谢:)这在python3中不起作用,因为urlparse和urllib组合成一个,并且不需要编码为Unicode,因为在python3中每个字符串都被视为Unicode。查看我在这一页上的最后一篇文章。
>>>url_fix('http://example.com/A, B C')    
'http://example.com/A%2C%20B%20C'
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))