Python:下载zip文件,而无需从直接链接中提取

问题描述

我正在尝试制作一个脚本,该脚本使用Python脚本从直接链接(例如“ http://beatsaver.com/api/download/key/f55c”)下载文件。 我从这里或其他网站尝试了各种代码,最终导致损坏的zip文件或“ zipfile.BadZipFile:文件不是zip文件”。

我尝试过:(zip损坏)

url = "http://beatsaver.com/api/download/key/f55c"
resp = requests.get(url)
zname = os.path.join('BeatSong',"song_test.zip")
zfile = open(zname,'wb')
zfile.write(resp.content)
zfile.close()

或此的3或4个变体:(引发:“ zipfile.BadZipFile:文件不是zip文件”)

url = "http://beatsaver.com/api/download/key/f55c"
resp = requests.get(url)
zip = zipfile.ZipFile(io.BytesIO(resp.content))
zip.extractall("/BeatSong")

链接加载后自动下载zip 有什么方法可以检索zip文件,就像从浏览器中下载该文件一样? 谢谢!

解决方法

首先,当尝试使用python时,URL返回403禁止的错误。该网站拒绝向您发送文件,因为它知道您是机器人。我可以通过设置用户代理来克服这个问题。

import urllib.request

url = "http://beatsaver.com/api/download/key/f55c"

#add headers so you don't get a 403 error
opener = urllib.request.build_opener()
opener.addheaders = [('user-agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/77.0.3865.90 Safari/537.36')]
urllib.request.install_opener(opener)

urllib.request.urlretrieve(url,'song.zip',)