Python 从网上下载文件

Python 从网上下载文件

Python提供了不同的模块,比如urllib,requests等,用于从网上下载文件。我将使用Python的请求库来高效地从URL下载文件。

让我们逐步查看使用请求库下载文件的步骤:

1. 导入模块

import requests

2. 获取链接或网址

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)

结果

Python 从网上下载文件

我们可以看到该文件已经下载到了我们当前的工作目录中(图标)。

但是我们可能需要从网络上下载不同类型的文件,比如图片、文本、视频等。所以让我们首先获取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的文件名。然而,在许多情况下,URL中并没有包含文件名信息,例如 – http://url.com/download。在这种情况下,我们需要获取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头部取得文件名。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程