如何用Python自动下载“1.3公里电子自旋无漏洞贝尔不等式违反”实验data.zip
解决Python下载data.zip的问题
直接使用requests.get()失败通常是因为服务器会验证请求的用户代理(User-Agent),拒绝非浏览器发起的请求。此外,你需要将响应内容写入本地文件才能完成下载。以下是可行的代码方案:
完整代码示例
import requests # 定义目标下载链接和保存路径 url = "https://data.4tu.nl/ndownloader/files/24056582" save_path = "./data.zip" # 模拟浏览器的请求头,避免被服务器拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0" } # 发起请求并保存文件 response = requests.get(url, headers=headers, allow_redirects=True) response.raise_for_status() # 检查请求是否成功 with open(save_path, "wb") as f: f.write(response.content) print(f"文件已成功下载到 {save_path}")
关键说明
- 添加User-Agent头:服务器通过这个字段识别请求来源,模拟浏览器的User-Agent可以绕过基础的反爬拦截。
allow_redirects=True:确保跟随跳转链接(如果有的话),保证最终获取到文件内容。response.raise_for_status():如果请求返回错误状态码(比如403、404),会抛出异常,方便排查问题。- 二进制写入:使用
"wb"模式打开文件,因为zip文件是二进制格式,避免内容损坏。
如果遇到大文件下载的情况,可改用流式写入,避免一次性加载整个文件到内存:
import requests url = "https://data.4tu.nl/ndownloader/files/24056582" save_path = "./data.zip" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0" } with requests.get(url, headers=headers, stream=True) as r: r.raise_for_status() with open(save_path, "wb") as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) print(f"大文件已成功下载到 {save_path}")
内容的提问来源于stack exchange,提问作者Galen
相关产品推荐
相关产品推荐

