我有一个小工具,我用来从一个网站上下载一个MP3文件,然后构建/更新一个播客XML文件,我已经添加到iTunes。
创建/更新XML文件的文本处理是用Python编写的。但是,我在Windows .bat文件中使用wget来下载实际的MP3文件。我更喜欢用Python编写整个实用程序。
我努力寻找一种用Python实际下载该文件的方法,因此我使用了wget。
那么,如何使用Python下载文件呢?
我有一个小工具,我用来从一个网站上下载一个MP3文件,然后构建/更新一个播客XML文件,我已经添加到iTunes。
创建/更新XML文件的文本处理是用Python编写的。但是,我在Windows .bat文件中使用wget来下载实际的MP3文件。我更喜欢用Python编写整个实用程序。
我努力寻找一种用Python实际下载该文件的方法,因此我使用了wget。
那么,如何使用Python下载文件呢?
当前回答
import urllib2
mp3file = urllib2.urlopen("http://www.example.com/songs/mp3.mp3")
with open('test.mp3','wb') as output:
output.write(mp3file.read())
open('test.mp3','wb')中的wb以二进制模式打开文件(并擦除任何现有文件),以便您可以使用它保存数据而不仅仅是文本。
其他回答
还有一个,使用urlretrieve:
import urllib.request
urllib.request.urlretrieve("http://www.example.com/songs/mp3.mp3", "mp3.mp3")
(对于Python 2使用import urllib和urllib.urlretrieve)
使用5行Python请求
import requests as req
remote_url = 'http://www.example.com/sound.mp3'
local_file_name = 'sound.mp3'
data = req.get(remote_url)
# Save file data to local copy
with open(local_file_name, 'wb')as file:
file.write(data.content)
现在对远程文件的本地副本执行一些操作
延迟回答,但对于python>=3.6,您可以使用:
import dload
dload.save(url)
安装dload:
pip3 install dload
另一种方法是调用外部进程,如curl.exe。Curl在默认情况下显示进度条、平均下载速度、剩余时间等,所有这些都整齐地格式化在一个表格中。 将curl.exe放在与脚本相同的目录中
from subprocess import call
url = ""
call(["curl", {url}, '--output', "song.mp3"])
注意:不能使用curl指定输出路径,所以使用os。重命名之后
如果你安装了wget,你可以使用parallel_sync。
PIP安装parallel_sync
from parallel_sync import wget
urls = ['http://something.png', 'http://somthing.tar.gz', 'http://somthing.zip']
wget.download('/tmp', urls)
# or a single file:
wget.download('/tmp', urls[0], filenames='x.zip', extract=True)
道格: https://pythonhosted.org/parallel_sync/pages/examples.html
这是非常强大的。它可以并行下载文件,失败时重试,甚至可以在远程机器上下载文件。