外链论坛

 找回密码
 立即注册
搜索
查看: 59|回复: 2

Python 中平常下载文件办法九个方面知识

[复制链接]

3083

主题

2万

回帖

9996万

积分

论坛元老

Rank: 8Rank: 8

积分
99968825
发表于 2024-8-18 00:24:42 | 显示全部楼层 |阅读模式

在 Python 中,咱们常常必须下载文件,例如爬虫下载页面中的照片、下载页面的链接pdf文件word文档、音频和视频;下载远程服务器上的资源,如压缩文件、视频、grib2等等。那样咱们能够经过那些办法来实现文件的下载呢?

必须说明的是:本例子运用下载网址为:

http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3,是一首MP3的歌曲,4M的体积。粉丝能够在评论区讨论。

1、运用requests

Requests 是 Python 中非常常用的第三方库,是一个非常强大、简单易用的 HTTP 请求库。

咱们直接采用requests.get 得到文件的内容,而后二进制的办法保留文件内容。url:下载的文件名;localfile:保留的本地文件名。timeout:单位秒,倘若文件比很强能够适当的延长期倘若文件比很强必须下载比较长的时间,这个办法就不太适合了。示例代码如下:

import requests url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3 #url:下载的文件名;localfile:保留的本地文件名。timeout:单位秒 r = requests.get(url,timeout=300) with open(localfile, "wb") as fp: fp.write(r.content)

2、运用urllib

urllib库是Python的标准库,因此呢必须安装它。 urllib 库是一个非常方便的下载工具,供给了简单易用的下载接口。调用 urllib 库的 urlretrieve() 办法下载文件。示例代码如下:

import urllib.request url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3urllib.request.urlretrieve(url, localfile)

3、运用urllib2

urllib2库是urllib库的加强版,供给更加多的功能和更好的错误处理。必须说明的是:urllib2 是 Python2.7 自带的模块(不必须下载,导入就可运用),在 python3 中,urllib2 被改为urllib.request。为了教程的完整性,还是在这儿介绍一下。示例代码如下:

import urllib2 url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3 data = urllib2.urlopen(url).read() with open(localfile, wb) as video: video.write(data)

4、运用urllib3

urllib3是urllib模块的改进版本,是一个轻量级的python库,供给了线程安全,HTTP连接池和重用,文件发送等。咱们经过运用urllib3来获取一个链接并将它存储在一个文件中。示例代码如下:

import urllib3 url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3 #创建一个HTTP连接池 http = urllib3.PoolManager() r = http.request(GET,url) print(r.data) with open(localfile, wb) as mp3: mp3.write(r.data) r.release_conn() #最后释放这个HTTP连接

5、运用wget

wget是一个从网络上自动下载文件的自由工具,跨平台软件。它支持HTTP,HTTPS和FTP协议,能够运用HTTP代理。这儿运用Python的wget模块从一个URL下载文件。wget.download直接从位置url下载到本地localfile。必须运用pip命令安装后才可运用

pip install wget

示例代码如下:

import wget url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3 wget.download(url,localfile)

除了运用 Python 编程语言,咱们能够使用命令行工具 wget 来下载文件。

下面是一个示例代码:

import os url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3localfile =./233599851.mp3 os.system(fwget -O {localfile} {url})

6、下载重定向的文件

有时咱们下载一个链接文件,然则远端的服务器将URL会被重定向到另一个的源URL。遇到这种状况运用requests.get能够容易处理。get办法中,咱们将allow_redirects设置为True,这将准许URL中的重定向,得到重定向后的内容后,而后二进制的办法保留文件内容。示例代码如下:

url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3 r = requests.get(url,timeout=300, allow_redirects=True) with open(localfile, "wb") asfp: fp.write(r.content)

下面介绍大文件的下载办法

大文件的下载,必须运用文件流进行下载,它是一种更有效、更安全的方式。运用文件流进行下载的原理,便是将文件一起一起地按次序从网络上读取,每读取一起就立即写入本地文件。这般办法能够保准安全靠谱地下载大文件,又能够避免因内存不足而引起的程序崩溃。

7、运用requests库中的get办法,下载大文件

运用requests库中的get办法,并将stream参数设置为True就可

示例代码如下:

url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3 r = requests.get(url, stream=True) fp = open(localfile, "wb") for chunk in r.iter_content(chunk_size=1024): ifchunk: fp.write(chunk) fp.flush()

8、运用urllib2,下载大文件

必须说明的是,urllib2是Python2.7 自带的模块,示例代码只能在Python2.7运行。做为知识认识一下。示例代码如下:

url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3 r = urllib2.Request(url) u = urllib2.urlopen(r) with open(localfile, wb) as f: while True: tmp = u.read(1024) if not tmp: break f.write(tmp)

9、运用urllib3,下载大文件

既然运用urllib2库能够下载文件,当然运用urllib3库能办到。利用http连接池的request办法,并将preload_content参数设置为False就可。示例代码如下:

import urllib3 url = http://cv.sycdn.kuwo.cn/99d1a17cc43457c58cd0049db033c348/650e4bbc/resource/n1/17/37/233599851.mp3 localfile = ./233599851.mp3 #创建一个HTTP连接池 http = urllib3.PoolManager() r = http.request(GET, url, preload_content=False) chunk_size = 1024withopen(localfile, wb) as out: while True: data = r.read(chunk_size) if not data: break out.write(data) r.release_conn() #最后释放这个HTTP连接

总结

经过介绍平常下载文件办法九个方面知识,咱们可以容易地实现 Python 下载文件的功能,同期阐述了大文件下载的处理办法。当然,下载文件应该还有其他的办法这儿就不一一介绍。其中,运用 Requests 库是最为常用的办法由于供给非常多强大而灵活的功能,非常方便编写繁杂的下载程序,这个是我在项目中常用的办法wget库下载功能强大,是一个非常好的办法

回复

使用道具 举报

3057

主题

2万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108867
发表于 2024-10-8 10:02:36 | 显示全部楼层
谷歌网站排名优化 http://www.fok120.com/
回复

使用道具 举报

2988

主题

2万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96066066
发表于 2024-10-15 03:53:55 | 显示全部楼层
感谢你的精彩评论,为我的思绪打开了新的窗口。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-5 21:47 , Processed in 0.073425 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.