Bash脚本执行wget与url内的输入



完全是新手,我知道你可能不会使用像这样的变量但是我有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的东西。

相关内容

  • 没有找到相关文章

最新更新