浏览器点击下载太 LOW,如何提高下载操作的逼格?

news2024/9/22 7:31:21

文章目录

  • Part.I Introduction
    • Chap.I 预备知识
    • Chap.II URL
  • Part.II 下载的方式
    • Chap.I Python
    • Chap.II Wget
    • Chap.III Curl
  • Reference

Part.I Introduction

用浏览器下载东西需要一个一个点击,当需要批量下载的时候,这样操作不免有些繁琐。本文整理了常用的一些指令,可以很方便地实现批量下载、多线程下载等提高生产效率。

在这里插入图片描述
下面是笔者的使用体会

  • curl 最好用
  • Windows 下就用 python 即可,没必要配置 curl 环境
  • UNIX 下可以使用 curl / wget

Chap.I 预备知识

下面是一些概念汇编

  • HTTP(HyperText Transfer Protocol),即超文本传输协议。浏览网页时在浏览器地址栏中输入的URL前面都是以http://开始的。HTTP 定义了信息如何被格式化、如何被传输,以及在各种命令下服务器和浏览器所采取的响应。端口号80
  • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。端口号443
  • TCP(Transmission Control Protocol)是传输控制协议,HTTP 是应用协议。端口号有好多。
  • FTP(File Transfer Protocol)即文件传输协议。端口号21

Chap.II URL

URL(Uniform Resource Locator),即统一资源定位符。URL 无非就是一个给定的独特资源在 Web 上的地址。理论上说,每个有效的 URL 都指向一个唯一的资源。这个资源可以是一个 HTML 页面,一个 CSS 文档,一幅图像,等等。URL 的格式一般为

scheme://domain_name[:port]/[path/file_name]
  • 其中scheme表示协议名,常见的有 https, http, ftp, gopher, telnet 等等;笔者目前接触到的也只有前三个。
  • domain_name表示域名,也可以是ip
  • port表示端口号,一般可以省略
  • 下面几个很好理解啦~
  • 除了上面所说的几个元素外,URL 很多情况下还包含参数(Parameters,?后面的东西)、锚点(Anchor,#后面的东西),有关内容可参看Ref.1

Part.II 下载的方式

通过指令下载文件的方式有很多,不同方式有不同的特点,下面针对笔者常用的几种方式做一个简要的介绍。首先是汇总的表格

Methodsource SupportSystem备注
Python requestsHTTPWIN / UNIX支持分块下载,当下载大文件时可以避免内存被超量占用。
Python wgetHTTP / FTP 匿名WIN / UNIX注意和 wget 区分
Python urllibHTTP / FTP 匿名WIN / UNIX内置库,不需额外安装
Python ftplibFTP 用户名WIN / UNIX内置库,不需额外安装
WIN wgetHTTP / FTPWIN下载二进制的 GUN wget
wgetHTTP / FTPWIN / UNIX注意安装 wget
curlHTTP / FTPWIN / UNIX注意配置环境

注:

  • python 和 curl 都是一种脚本语言,只要在操作系统中配置了相应的环境,就可以用。
  • GNU wget 既有 UNIX 版本,也有 Windows 版本,只要下载就可以调用相应的指令。

下面每个部分会介绍每种方法是如何使用的。在介绍这些指令如何使用的过程中,示例就是下载这样几个文件(很容易看出来笔者是搞 GNSS 的):

  • HTTP:https://datacenter.iers.org/products/eop/rapid/daily/finals2000A.daily
  • FTP:ftp://igs.gnsswhu.cn/pub/gps/data/daily/2021/brdc/BRDC00IGS_R_20210010000_01D_MN.rnx.gz
  • FTP:ftp://igs.gnsswhu.cn/pub/whu/phasebias/Readme.txt

Chap.I Python

用 Python 下载文件有很多种方式,比如:requests,wget,urllib,ftplib 等等,下面分别加以介绍。

requests ,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。 它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。它是 Pyhton 的三方库,没有安装需要首先 pip install requests。当下载的文件比较大时,可以分块下载避免内存不足。下面是分块下载的实现并且显示了下载进度:

import os
import time
import requests
from contextlib import closing
def requests_download(url, outPath = ''):
    """
    Wget download file.
     
    > @param[in] url:           the source
    > @param[in] outPath:       output filepath
    return: 
    < @param[out] void
    """
    tmp = os.path.split(url)
    fname = tmp[1]
    if len(outPath) != 0:
        fname = outPath + '\\' + fname
    start_time = time.time()        # begin Time
    with closing(requests.get(url, stream=True)) as response:
        chunk_size = 1024           # MaxSize of Single request
        content_size = int(response.headers['content-length'])  # The total size
        data_count = 0
        with open(fname, "wb") as file:
            for data in response.iter_content(chunk_size=chunk_size):
                file.write(data)
                data_count = data_count + len(data)
                now_jd = (data_count / content_size) * 100
                speed = data_count / 1024 / (time.time() - start_time)
                print("\r Download Progress: %03d%% (%d/%d)KB Speed: %dKB/s - %s"
                      % (now_jd, data_count / 1024, content_size / 1024, 
                         speed, fname), end="")
    return 0

wget ,它是 Pyhton 的三方库,没有安装需要首先 pip install wget。虽然它和 Linux 下的 wget 是一个名字,但是此 wget 非彼 wget

import wget
wget.download(url, out=None, bar=bar_adaptive)	# 函数声明

wget 有三个参数:

  • url:下载源,可以是 HTTP 也可以是 FTP
  • out:下载后保存的文件路径,可以通过它来指定下载的位置和名称;默认保存在当前工作目录
  • bar_adaptive:下载进度条样式
def wget_download(url, outPath = ''):
    """
    Wget download file.
     
    > @param[in] url:           the source
    > @param[in] outPath:       output filepath
    return: 
    < @param[out] void
    """
    fname = wget.filename_from_url(url)     # get fileName
    if len(outPath) != 0:
        fname = outPath + '\\' + fname
    wget.download(url, out = fname)
    return 0

上面是笔者编写的小函数,可以讲下载的文件保存在指定的目录下,文件名保持不变。


urllib ,它是 Python 内置的库,所以不用安装一看就是下载 http 的。其使用比较简单,下面是一个小函数

import os
import urllib

def urllib_download(url, outPath = ''):
    """
    Wget download file.
     
    > @param[in] url:           the source
    > @param[in] outPath:       output filepath
    return: 
    < @param[out] void
    """
    tmp = os.path.split(url)
    fname = tmp[1]     # get fileName
    if len(outPath) != 0:
        fname = outPath + '\\' + fname
    urllib.request.urlretrieve(url, fname)
    return 0

ftplib ,它是 Python 内置的库,所以不用安装一看就是下载 ftp 的。其使用略微复杂一点,因为 FTP 大部分需要登陆才可以有访问权限。下面是根据一个大佬的脚本(Ref.2)做的修改:

import ftplib

def _ftpconnect(host, username, password):
    ftp = FTP()
    ftp.connect(host, 21)
    ftp.login(username, password)
    return ftp
 
def _downloadfile(ftp, remotepath, localpath):
    bufsize = 1024
    fp = open(localpath, 'wb')
    ftp.retrbinary('RETR'+remotepath, fp.write, bufsize) 
    ftp.set_debuglevel(0)
    fp.close()


def _uploadfile(ftp, remotepath, localpath):
    bufsize = 1024
    fp = open(localpath, 'rb')
    ftp.storbinary('STOR'+remotepath, fp, bufsize)
    ftp.set_debuglevel(0)
    fp.close()


def ftp_download_usr(host, username, password, remotepath, localpath):
    """
    Wget download file.
     
    > @param[in] host:          IP address
    > @param[in] username:      user name
    > @param[in] password:      password
    > @param[in] remotepath:    remote filePath
    > @param[in] localpath:     local filePath
    return: 
    < @param[out] void
    """
    ftp = _ftpconnect(host, username, password)
    _downloadfile(ftp, remotepath, localpath)
    ftp.quit()
    return 0


def ftp_upload_usr(host, username, password, remotepath, localpath):
    """
    Wget download file.
     
    > @param[in] host:          IP address
    > @param[in] username:      user name
    > @param[in] password:      password
    > @param[in] remotepath:    remote filePath
    > @param[in] localpath:     local filePath
    return: 
    < @param[out] void
    """
    ftp = _ftpconnect(host, username, password)
    _uploadfile(ftp, remotepath, localpath)
    ftp.quit()
    return 0

Chap.II Wget

wget 在 Linux 系统下最为常见,但是在 Windows 中也有相应的 wget,需要下载。


WIN wget

  • 戳我下载;现在最新版本是1.21.3,下载zip即可,安装到一个合适的目录;
  • 右键『此电脑』(计算机)→属性→右边『高级系统设置』→环境变量→系统变量→path 编辑;把wget.exe 所在目录加进去。
  • 打开cmd,输入wget -V看看是否安装成功

UNIX wget ,调用指令安装

apt-get install wget -y
wget --version			# 检查是否安装成功

关于wget的使用,可以参考Ref.3&4,下面举个例子:

wget ftp://igs.gnsswhu.cn/pub/whu/phasebias/Readme.txt

Chap.III Curl

curl 是一种脚本语言,第一接触到它是在大四,当时师兄的一个下文件的脚本就是用它写的;然后本来还想好好学习一些这种语言的语法,后来事情很多,被搁置了。

关于wget的使用,可以参考Ref.5,下面举个例子:

curl [option] [url]		# syntax
# 将网页另存为 tmp.xml
curl https://datacenter.iers.org/products/eop/rapid/daily >> tmp.xml
# 下载 http 中的文件
curl -O https://datacenter.iers.org/products/eop/rapid/daily/finals2000A.daily
# 下载可匿名访问的 ftp 中的文件
curl -O ftp://igs.gnsswhu.cn/pub/gps/data/daily/2021/brdc/BRDC00IGS_R_20210010000_01D_MN.rnx.gz
# 通过用户名和密码下载 FTP 文件
curl -O ftp://usr:password@www.linux.com/dodo1.JPG
# ------------ 复杂的操作 - 需要 cookies 和用户名密码的;
# -c 操作结束后把cookie写入到这个文件中
# -b cookie字符串或文件读取位置
# -n 从netrc文件中读取用户名和密码
# -L 列出ftp目录下的文件名称
# -O 把输出写到该文件中,保留远程文件的文件名
curl -c .urs_cookies -b .urs_cookies -n -L https://files.igs.org/pub/station/general/igs14.atx -O
# -------------------

Reference

  1. 什么是 URL
  2. python ftplib模块下载FTP文件
  3. GNU Wget 1.21.1-dirty Manual
  4. Wget Options
  5. Linux curl 命令下载文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指示学习(Instruct Learning)和提示(Prompt Learning)学习区别

https://arxiv.org/pdf/2109.01652.pdf 提出instruct learning的论文 指示学习是谷歌Deepmind的Quoc V.Le团队在2021年的一篇名为《Finetuned Language Models Are Zero-Shot Learners》文章中提出的思想。指示学习和提示学习的目的都是去挖掘语言模型本身具备的知识。不同的是…

安全运营场景下的语言模型应用

接上篇&#xff0c;将安全运营的定义为“使用算法能力提取关键信息”&#xff0c;以此来规避算法误判漏判带来的责任问题&#xff0c;同时提升运营人员的工作效率。在这篇尝试对语言模型的使用方法做一下讨论和分享。 1. 语言模型 先聊一下语言模型。&#xff08;这里刻意规避…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 赛后总结之31页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 1 题目 电商物流网络由物流场地&#xff08;接货仓、分拣中心、营业部等&#xff09;和物流场 地之间的运输线路组成&#xff0c;如图 1 所示。受节假日和“双十一”、“618”等…

计算机视觉(2)——图像预处理

目录 二、图像预处理 2.1 介绍 2.2 特征提取方法 2.2.1 直方图 2.2.2 CLAHE 2.2.3 形态学运算 2.2.4 空间域处理及其变换 2.2.5 空间域分析及变换 &#xff08;1&#xff09; 均值滤波 &#xff08;2&#xff09;中值滤波 &#xff08;3&#xff09;高斯滤波 &am…

【博弈论】【第一章】博弈论导论

博弈论导论 【例题】选择数字【例题】巴什博弈【例题】射手博弈博弈论的基本概念&#xff1a;参与人战略行动信息支付函数【例题】分100元 课程概述&#xff1a; 【例题】选择数字 两个参与人A和B&#xff0c;轮流选择[3,4,5,6,7,8,9]中的一个整数&#xff08;可重复)。当累计…

【JUC基础】01. 初步认识JUC

目录 1、前言 2、什么是JUC 3、并行和并发 4、进程和线程 5、如何创建子线程 5.1、继承Thread 5.2、实现Runnable 5.3、实现Callable 5.4、小结 6、Thread和Runnable 7、Runnable和Callable 8、线程状态 9、总结 1、前言 前段时间&#xff0c;有朋友跟我说&#…

(7) 支持向量机(上)

文章目录 1 概述1.1 支持向量机分类器是如何工作的 2 sklearn.svm.SVC2.1 线性SVM决策过程的可视化2.2 重要参数kernel&#xff08;核函数&#xff09;2.3 探索核函数在不同数据集上的表现2.4 探索核函数的优势和缺陷2.5 选取与核函数相关的参数&#xff1a;degree & gamma…

【Java笔试强训 27】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525; 不用加…

VSCode下载、安装和简单配置

之前提到Python IDE的选择时&#xff0c;VSCode以其轻便、简洁、高效、专业等优点成为最适合做Python工程项目开发的IDE&#xff0c;本期就来详细讲解一下VSCode的一个下载、安装以及Python开发环境的配置。 一、下载 直接进入VSCode官网&#xff0c;选择对应系统版本的VSCod…

切片、索引和排序

关于使用Series切片带尾片的疑惑。 切片是数字的时候不带尾片 切片非数字时带尾片 索引 可以使用loc()和iloc()选择数据。轴标签(loc())&#xff0c;整数标签(iloc())。 # 第一行列名为’A‘&#xff0c;’B‘的行。 print( df.loc[1, [A, B]])# [0, 1)的列为 [B(1), A(0…

默认成员函数:详解类的隐式操作

目录 一.类的默认成员函数二.构造函数三.析构函数。四.拷贝构造函数五.赋值运算符重载 一.类的默认成员函数 类的默认成员函数就是定义一个类后&#xff0c;类会自动生成的成员函数&#xff0c;若我们显示定义则类不会自动生成。 二.构造函数 在数据结构学习阶段我们手撕过栈…

VC++ | MFC应用程序设计:框架搭建

VC | MFC应用程序设计&#xff1a;框架搭建 时间&#xff1a;2023-05-01 文章目录 VC | MFC应用程序设计&#xff1a;框架搭建1.启动程序2.新建项目2-1.新建项目2-2.应用程序类型2-3.文档模板属性2-4.用户界面功能2-5.高级功能选项2-6.生成的类2-7.解决方案资源管理器 3.工程文…

如何在外远程控制我的世界服务器 - MCSM面板【端口映射】

文章目录 概述1.MCSManager 安装2.内网穿透2.1 安装cpolar内网穿透 3. 访问公网地址4.固定公网地址4.1 保留一个二级子域名4.2 配置固定二级域名4.3 访问固定公网地址 5. 设置节点公网地址6. 固定节点公网地址6.1 保留一个固定tcp地址6.2 配置固定TCP地址 转载自远程穿透文章&a…

【Latex】有关于Latex tabularray的一些很不错的教程、模板

1. 简介&#xff1a; 除了大家熟知的tabular&#xff0c;Latex在2021年出了一个table排版的新包&#xff1a;tabularray。 笔者这几天初步体验了一下tabularray&#xff0c;个人觉得tabularray明显比tabular的使用体感好不少。 不管是从排版的效果、便捷程度&#xff0c;还是…

基于NumPy构建LSTM模块并进行实例应用(附代码)

文章目录 0. 前言0.1 读本文前的必备知识 1. LSTM架构2. LSTM正向传播代码实现2.1 隐藏层正向传播2.2 输出层正向传播 3. LSTM反向传播代码实现3.1 输出层反向传播3.2 隐藏层反向传播 4. 实例应用说明5. 运行结果6. 后记6 完整代码 0. 前言 按照国际惯例&#xff0c;首先声明&a…

目标跟踪--卡尔曼滤波 与 匈牙利算法

目前主流的目标跟踪算法都是基于Tracking-by-Detecton策略&#xff0c;即基于目标检测的结果来进行目标跟踪。 跟踪结果中&#xff0c;每个bbox左上角的数字是用来标识某个人的唯一ID号。那么问题就来了&#xff0c;视频中不同时刻的同一个人&#xff0c;位置发生了变化&#x…

西瓜书读书笔记整理(三)—— 第二章 模型评估与选择

第二章 模型评估与选择 第 2 章 模型评估与选择2.1 经验误差与过拟合1. 错误率 / 精度 / 误差2. 训练误差 / 经验误差 / 泛化误差3. 过拟合 / 欠拟合4. 学习能力5. 模型选择 2.2 评估方法1. 评估方法概述2. 留出法3. 交叉验证法4. 自助法5. 调参 / 最终模型 2.3 性能度量1. 回归…

【JavaEE】UDP数据报套接字—实现回显服务器(网络编程)

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本篇文章将带你了解什么是网络编程&#xff1f; 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff08;或称为网络数据传输&am…

中断-STM32

中断-STM32 中断:在主程序运行过程中&#xff0c;出现了特定的中断触发条件 (中断源)&#xff0c;使得CPU暂停当前正在运行的程序转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行。 中断优先级:当有多个中断源同时申请中断时&#xff0c;CPU会根据中断源的轻重缓…

Java程序猿搬砖笔记(十一)

文章目录 Hexo博客 Next主题图片防盗链问题Springboot Druid数据库密码加密配置步骤Java统计字符串出现的次数Java获取某个字符在字符串中出现第N次的位置Maven激活指定profileMaven中resources标签的用法详解MySQL 字符集不一致报错EasyExcel日期格式化Configuration、Compone…