我一直在盲目地尝试许多
curl
和 wget
的变体来尝试下载一些 .zip
文件。我尝试的第一件事是:
curl --klo ".\bhcdata#1.zip" "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2011&DQTR=[1-4]"
上面的命令实际上是在芝加哥联邦储备银行的文档中提供的,但它在我的 Ubuntu 机器上抛出错误消息:curl: option --klo: is unknown
。有没有直接的方法来做到这一点?
为了准确地澄清我想要做什么:芝加哥联储网站允许您输入年份和季度,然后单击“下载数据文件”,它会为您提供相应数据的.zip文件。我想对所有季度执行此操作,因此我需要一种为每个季度编写命令的方法,以便我可以循环它们。上面示例命令中的 [1-4]
会获取一年内的所有四个季度,但我一次只获取一个季度就可以了,而且我也尝试过替换
1
。我尝试过使用和不使用各种选项组合,但还没有任何效果。
curl -o ./bhcdata1.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2011&DQTR=1"
注:
bhcdata1.zip
的文件:
-rw-r--r-- 1 floris floris 1545868 Feb 13 21:05 bhcdata1.zip
您可能会发现您还需要
-k
标志……尽管我在我的机器上不需要。那么就可以了
curl -ko ./bhcdata1.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2011&DQTR=1"
效果同样好...
奖励要获得全部四个季度,您只需将以下几行放入脚本中即可。将其另存为 downloadAll
。使用
chmod 755 downloadAll
将文件更改为“可执行文件”,然后键入
./downloadAll
。享受…
#!/bin/bash
for i in {1..4}
do
curl -ko ./bhcdata$i.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2011&DQTR=$i"
done
结果:
-rw-r--r-- 1 floris floris 1545868 Feb 13 21:11 bhcdata1.zip
-rw-r--r-- 1 floris floris 2413876 Feb 13 21:11 bhcdata2.zip
-rw-r--r-- 1 floris floris 1573810 Feb 13 21:11 bhcdata3.zip
-rw-r--r-- 1 floris floris 2500525 Feb 13 21:12 bhcdata4.zip
如果你想要多年,就做(某种变体)
#!/bin/bash
for yr in {2010..2012}
do
for qtr in {1..4}
do
curl -ko ./bhcdata$yr_$qtr.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=$yr&DQTR=$qtr"
done
done
wget "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2013&DQTR=1"
您应该能够循环年份和季度
#!/bin/bash
for i in {1986..2011}
do
for j in {1..4}
do
curl -ko year${i}month${j}.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=$i&DQTR=$j"
done
done
curl -O -J -L file_name_url.zip
来自curl(1)的解释:
-O, --remote-name
将输出写入本地文件,其名称类似于我们获得的远程文件。 (仅有的 使用远程文件的文件部分,路径被切断。)用于保存的远程文件名是从给定的中提取的 网址,没有别的。
因此,该文件将保存在当前工作文件夹中 目录。如果您希望将文件保存在不同的目录中,请执行 确保在调用curl之前更改当前工作目录 使用 -O, --remote-name 标志!
您可以多次使用此选项,次数与您拥有的 URL 数量相同。
-J, --remote-header-name
(HTTP) 此选项告诉 -O, --remote-name 选项使用 服务器指定的内容-处置文件名而不是提取 来自 URL 的文件名。
-L, --location
(HTTP/HTTPS) 如果服务器报告请求的页面已移动 到不同的位置(用 Location: 标头和 3XX 响应代码),此选项将使curl 重做请求 新地方。如果与 -i、--include 或 -I、--head 一起使用, 将显示所有请求页面的标题。认证时 使用时,curl 仅将其凭据发送到初始主机。如果一个 重定向将curl带到不同的主机,它将无法 拦截用户+密码。另请参阅 --location-trusted 了解如何操作 改变这一点。您可以限制要遵循的重定向数量 使用 --max-redirs 选项。当curl遵循重定向并且请求不是普通的GET时(对于 例如 POST 或 PUT),它将使用 GET 执行以下请求 如果 HTTP 响应是 301、302 或 303。如果响应代码是 任何其他 3xx 代码,curl 将使用以下命令重新发送以下请求 相同的未修改方法。