如何通过urllib2.urlopen下载文件

时间:2013-08-23 23:56:25

标签: python python-2.7 python-3.x urllib2 urllib

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

但我的结束网址不简单,它有特殊字符:

www.math.ualberta.ca/mss/misc/A Mathematician's Apology.pdf

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

我知道的一些

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

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

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

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

  1. urllib.quote(string [,safe])
  2. urllib.quote_plus(string [,safe])
  3. urllib.unquote(字符串)
  4. urllib.unquote_plus(字符串)
  5. 请通过示例帮助我使用此方法

    谢谢

2 个答案:

答案 0 :(得分:0)

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

filename = url.split('/')[-1]
cleanurl = urllib.quote(url)
urllib.urlretrieve(cleanurl, filename)

答案 1 :(得分:0)

您只想引用网址的路径组件,而不是整个引用。

最简洁的方法是将其拆分为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'

当然,在实际使用之前,你还需要添加一个方案。