在线下大文件下到一半自动断?

之前下载一些网站数据,遇到大文件,下到一半源服务器就中断,后面就找到了WGET,一个通过命令行下载文件和抓取网站的免费工具。WGET 提供了一组命令来下载文件,且能批量==下载失败自动重连且会顺着上次的下载继续下。==

关于WGET

背景

  • GNU(GNU's Not Unix)是一个拥有大量自由软件的集合,也可作为独立的操作系统使用,如linux,GNU项目的目标是实现一个完全免费的软件操作系统。创始人 (Richard Stallman)之后还成立了自由软件基金会(FSF)并聘请软件开发人员编写GNU所需的软件。
  • GNU Wget(Wget)是一个可以从网络服务器上获取内容的计算机程序,支持 HTTP, HTTPS, and FTP等的下载。下载代理工具
  • 它填补了 90 年代中期可用的不一致的网络下载软件的空白,即之前程序只能通过一种方式如FTP来下载文件。
  • 我用它主要是因为它还能自动处理网络瞬时故障,即==下载失败会顺着上次的下载继续下==

特点

WGET 通过命令行下载文件和抓取网站

  • 稳健:下载文件时会自动重连+下载
  • 批量:可以递归下载,即批处理
  • 自动:非交互即不需要图形界面及登录,自动完成大数据传输
  • 便携:对第三方依赖小,只需要一个 C 编译器和一个类似于 BSD 的TCP/IP网络接口,Wget 是用可移植的 C 语言创建的,可以在任何 Unix 系统上使用。也可以在 Mac OS X、Microsoft Windows、AmigaOS 和其他流行平台上实施。

使用

==下载安装==

  • 程序下载以下均可:https://eternallybored.org/misc/wget/
    • 其他下载链接:官方2, aliyun镜像 wget
    • 对于windows可下载最新版的64-bit exe并放在文件夹下C:\Windows\System32,这样就相当于配置了系统环境变量,就可以在CMD中直接运行
  • ubuntu:sudo apt-get install wget

安装完后在命令行输入wget -h即可看到帮助文档,即命令用法

==使用命令示例,打开CMD==:更多命令可以查看文档,我个人最常用的就是-c -i -P 这几个参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 下载文件到当前目录 默认位置
wget https://wordpress.org/latest.zip
# 下载时掉线自动重连-c,即如果断了会自动续下
wget -c https://example/very-big-file.zip
wget -c https://wordpress.org/latest.zip
# 下载多个文件:txt由多行链接组成
wget -i urls.txt
# 下载并重命名文件
wget -O wordpress-install.zip https://wordpress.org/latest.zip
# 下载到指定目录,最后加一个-P写地址即可
wget ... -P .../latest.zip
# 批量下载规则文件
wget http://example.com/images/{1..50}.jpg
# FTP下载,需设置用户及密码:
wget --ftp-user=YOUR_USERNAME --ftp-password=YOUR_PASSWORD ftp://....tar
# 直接复刻网页内容,-P后跟的是当前路径下的文件夹
wget --mirror --convert-links --page-requisites --no-parent -P documents/websites/ https://some-website.com
# 其他
# 下载限速:
wget --limit-rate=1024k https://wordpress.org/latest.zip
# 设置重连次数:
wget -tries=100 https://wordpress.org/latest.zip`
# 设置后台下载(大文件),路径下还会出现log日志文件
wget -b http://example.com/beefy-file.tar.gz

此外:如果需要代理网络则需要==让CMD走代理流量==才行

Python wget

Python调用exe执行,没具体测试过,大致代码

  • pip install wget
  • import wget; wget.download(url, bar=bar_thermometer)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# import the wget module
from wget import download
#
# create a downloader class.
class downloader:
# Create a custom prgress bar method
def progressBar(self,current,total):
print("Downloading: %d%% [%d / %d] bytes" % (current / total * 100, current, total))

# Create a downloadfile method
# Accepting the url and the file storage location
# Set the location to an empty string by default.

def downloadFile(self, url, location=""):
# Download file and with a custom progress bar
download(url, out = location, bar = self.progressBar)

downloadObj = downloader()
downloadObj.downloadFile("https://blog.debugeverything.com/wp-content/uploads/2021/04/python-virtualenv-project-structure.jpg","files")

其他参考

  • 官方文档:https://www.gnu.org/software/wget/manual/wget.html

  • 参考1: https://www.hostinger.com/tutorials/wget-command-examples/

  • 参考2: https://builtvisible.com/download-your-website-with-wget/