编写网络爬虫程序,实现支持断点续传的网络文件下载功能。 https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.2.4/spark-3.2.4-bin-hadoop2.7.tgz
时间: 2024-06-08 17:09:49 浏览: 75
文件下载上传 一个支持暂停下载断点续传的源码 (程序源码).rar
以下是一个基于Python的网络爬虫程序,实现支持断点续传的网络文件下载功能:
```python
import os
import requests
url = "https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.2.4/spark-3.2.4-bin-hadoop2.7.tgz"
file_name = url.split("/")[-1]
file_size = int(requests.head(url).headers["Content-Length"])
block_size = 1024 * 1024
num_blocks = (file_size // block_size) + 1
if os.path.exists(file_name):
first_byte = os.path.getsize(file_name)
else:
first_byte = 0
if first_byte >= file_size:
print("File already downloaded")
exit()
headers = {"Range": f"bytes={first_byte}-{file_size}"}
response = requests.get(url, headers=headers, stream=True)
with open(file_name, "ab") as f:
for i, block in enumerate(response.iter_content(block_size)):
f.seek(first_byte)
f.write(block)
first_byte += len(block)
percent = (first_byte / file_size) * 100
print(f"Downloaded {i+1}/{num_blocks} blocks ({percent:.2f}%)")
```
程序首先获取文件的大小和名称,然后计算出每个下载块的大小,并计算需要下载的块数。如果文件已经存在并且大小与服务器上的文件相同,程序将直接退出。否则,程序将计算文件的第一个字节位置,使用 HTTP 请求头部中的“Range”参数请求服务器下载剩余的文件块。
程序使用迭代器逐个写入下载的块,并在控制台上输出当前下载进度。如果程序中断,它将从最后一个已经下载的块继续下载,以实现支持断点续传的功能。
阅读全文