完全是新手,我知道你可能不会使用像这样的变量但是我有20分钟的时间来传递这个所以HELP
read -r -p "Month?: " month
read -r -p "Year?: " year
URL= "https://gz.blockchair.com/ethereum/blocks/"
wget -w 2 --limit-rate=20k "${URL}blockchair_ethereum_blocks_$year$month*.tsv.gz"
exit
你的代码有两个问题。
首先,在声明URL
变量时,应该删除等号后面的空白。这一行变成了
URL="https://gz.blockchair.com/ethereum/blocks/"
然后,使用通配符构建URL,这在本案中是不允许的。所以你不能做像month*.tsv.gz
这样的事情。如果需要对多个url执行请求,则需要为每个url运行wget。
这是可能做什么你试图做与wget
,然而,这个特定的网站的robots.txt有一个规则,禁止所有文件的爬行(https://gz.blockchair.com/robots.txt):
User-agent: *
Disallow: /
这意味着该网站的管理员不希望你这样做。默认情况下,wget
尊重robots.txt
,但可以关闭-e robots=off
。
出于这个原因,我不会发布一个具体的,复制/粘贴的解决方案。
下面是一个使用glob模式从一个典型的html索引页中选择(和下载)文件的通用示例:
url=https://www.example.com/path/to/index
wget
--wait 2 --random-wait --limit=20k
--recursive --no-parent --level 1
--no-directories
-A "file[0-9][0-9]"
"$url"
这将下载所有名为
file
的文件,带有两位后缀(file52
等),链接到$url
的页面上,其父路径也是$url
(--no-parent
)。这是一个递归下载,递归一级链接(
--level 1
)。wget
允许我们在递归时使用模式来接受或拒绝文件名(-A
和-R
用于globs,还有--accept-regex
,--reject-regex
)。某些网站屏蔽可能会屏蔽
wget
用户代理字符串,它可以被--user-agent
欺骗。请注意,某些网站可能会禁止您的IP(和/或将其添加到黑名单)的抓取,特别是做重复,或不尊重
robots.txt
。
在每月每天下载块的情况下,您可以将原始脚本中的*
符号更改为参数,例如day
,并先前将变量days
分配给日期列表。
然后像for day in days…
一样迭代并执行wget的东西。