0

我知道如何从 urrlib2.urlopen 下载简单文件

但我的最终 URL 并不简单,它有特殊字符:

www.math.ualberta.ca/mss/misc/数学家的道歉.pdf

特殊字符数学家的 '在这条路上

我是怎么知道的

http://www.math.ualberta.ca/mss/misc/A%20Mathematician%27s%20Apology.pdf

是我必须用来下载文件的网址,但如果我每次都没有这种结束网址

请给我解决方案,以便我可以下载具有特殊 URL 的文件

我有可以使用的基本方法,但我不知道如何使用

  1. urllib.quote(string[, safe])
  2. urllib.quote_plus(string[, safe])
  3. urllib.unquote(字符串)
  4. urllib.unquote_plus(string)

请通过示例帮助我使用此方法

谢谢你

4

2 回答 2

0

为什么不使用这样的东西?

filename = url.split('/')[-1]
cleanurl = urllib.quote(url)
urllib.urlretrieve(cleanurl, filename)
于 2013-08-24T00:20:07.563 回答
0

您只想引用 URL 的路径部分,而不是整个内容。

最简洁的方法是使用 将其拆分为多个部分urlparse,引用路径组件,然后重新加入整个事物。

但事实证明,urlparse无论如何都会自动引用路径。这并没有真正记录在案,但到目前为止每个版本都是如此,所以如果你愿意依赖它,它就像这样简单:

>>> url = "www.math.ualberta.ca/mss/misc/A Mathematician's Apology.pdf"
>>> url = urlparse.urlparse(url).geturl()
>>> url
'http://www.math.ualberta.ca/mss/misc/A%20Mathematician%27s%20Apology.pdf'

如果你实际上只有一个主机和路径,你实际上可以使用urllib.quote. 使用完整的 URL,它将引用:方案和主机之间的字符,但如果您没有方案,如您的示例所示,那不是问题。(当然它也会引用你的例子中的杂散空间......但无论你做什么,这些都会成为一个问题所以你的第一步必须是删除它们。)

>>> url = " www.math.ualberta.ca/mss/misc/A Mathematician's Apology.pdf "
>>> url = urllib.quote(url.strip())
>>> url
'www.math.ualberta.ca/mss/misc/A%20Mathematician%27s%20Apology.pdf'

当然,在它真正有用之前,您仍然需要添加一个方案。

于 2013-08-24T01:48:28.627 回答