使用Python下载网络文件?
Python 提供了不同的模块,例如 urllib,requests 等,用于从网络下载文件。我将使用Python的requests库来高效地从URL下载文件。
让我们一步一步地看看如何使用requests库从URL下载文件:
1. 导入模块
import requests
2. 获取链接或URL
url = 'https://www.facebook.com/favicon.ico' r = requests.get(url, allow_redirects=True)
3. 使用名称保存内容。
open('facebook.ico', 'wb').write(r.content)
将文件保存为facebook.ico。
示例
import requests url = 'https://www.facebook.com/favicon.ico' r = requests.get(url, allow_redirects=True) open('facebook.ico', 'wb').write(r.content)
结果
我们可以看到文件(图标)已下载到我们的当前工作目录。
但是我们可能需要从网络下载不同类型的文件,例如图像、文本、视频等。所以让我们首先获取URL链接到的数据类型:
>>> r = requests.get(url, allow_redirects=True) >>> print(r.headers.get('content-type')) image/png
然而,有一种更聪明的方法,它涉及在实际下载文件之前仅获取URL的头部信息。这允许我们跳过下载那些不应下载的文件。
>>> print(is_downloadable('https://www.youtube.com/watch?v=xCglV_dqFGI')) False >>> print(is_downloadable('https://www.facebook.com/favicon.ico')) True
为了根据文件大小限制下载,我们可以从content-length头部信息获取文件大小,然后根据我们的需求进行操作。
contentLength = header.get('content-length', None) if contentLength and contentLength > 2e8: # 200 mb approx return False
从URL获取文件名
要获取文件名,我们可以解析URL。下面是一个示例程序,它获取反斜杠(/)后的最后一个字符串。
url= "http://www.computersolution.tech/wp-content/uploads/2016/05/tutorialspoint-logo.png" if url.find('/'): print(url.rsplit('/', 1)[1]
以上将给出URL的文件名。但是,在许多情况下,例如http://url.com/download,URL中不存在文件名信息。在这种情况下,我们需要获取Content-Disposition头部信息,其中包含文件名信息。
import requests import re def getFilename_fromCd(cd): """ Get filename from content-disposition """ if not cd: return None fname = re.findall('filename=(.+)', cd) if len(fname) == 0: return None return fname[0] url = 'http://google.com/favicon.ico' r = requests.get(url, allow_redirects=True) filename = getFilename_fromCd(r.headers.get('content-disposition')) open(filename, 'wb').write(r.content)
上述URL解析代码与上述程序结合使用,大多数情况下可以从Content-Disposition头部信息获取文件名。
广告