Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:下载zip文件而不从直接链接提取_Python_Zip_Downloadfile - Fatal编程技术网

Python:下载zip文件而不从直接链接提取

Python:下载zip文件而不从直接链接提取,python,zip,downloadfile,Python,Zip,Downloadfile,我正在尝试制作一个脚本,用于从直接链接下载文件(例如:http://beatsaver.com/api/download/key/f55c)使用Python脚本。 我在这里或其他网站上尝试过各种代码,要么最终导致zip文件损坏,要么导致“zipfile.BadZipFile:file不是zip文件” 我试过这个:(拉链坏了) 或者3或4个变体:(raise:“zipfile.BadZipFile:文件不是zip文件”) 该链接在加载时自动下载zip 有什么方法可以像从浏览器下载zip文件一样检索

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

我试过这个:(拉链坏了)

或者3或4个变体:(raise:“zipfile.BadZipFile:文件不是zip文件”)

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

首先,在尝试使用python获取url时,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', )

通过这种方式下载的文件与通过浏览器下载的文件有何不同?关键是要自动下载几百个文件,而不是一个接一个地点击它们。现在我误解了你的问题。我就是无法打开用脚本下载的zip文件,上面写着“已损坏的存档文件或无法识别的格式”(计算机不是英语)浏览器zip文件很好,我的意思是,文件大小不同吗?当你看字节的时候,你看到了什么不同?可能会让你了解出了什么问题。啊,是的,的确如此!脚本文件的重量约为4KB,而浏览器文件的重量约为8MB!这个用户代理是Chrome使用的,对吗?(我刚刚读了一篇关于它的快速教程)谢谢你的时间!是的,我刚刚从正在使用的浏览器中复制了用户代理。有一些工具会提供一个随机的用户代理。另外,请确保您的下载空间,因为我们知道beatsaver正在阻止bot,并且您不会给他们另一种方式来识别您的应用程序是否为bot。
url = "http://beatsaver.com/api/download/key/f55c"
resp = requests.get(url)
zip = zipfile.ZipFile(io.BytesIO(resp.content))
zip.extractall("/BeatSong")
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', )