使用wget下载指定子文件夹仅得robots.txt和index.html,如何获取目标.nc文件
问题分析与解决方案
你的命令存在几个关键错误,导致无法正确抓取目标.nc文件:
-A参数用法错误:-A仅用于匹配文件名,不能用来匹配路径。你之前写的-A "*/*/*/netcdf/*"试图用路径规则过滤,wget无法识别,自然不会下载任何nc文件,仅返回目录索引和robots.txt。- robots规则未正确关闭:
robots=off的正确写法是-e robots=off,缺少-e参数时,wget会遵守服务器的robots.txt限制,被禁止爬取深层目录。 - 目录匹配规则不准确:你更新后的
--include-directories="*/*/netcdf"匹配层级错误,实际目录结构是年份/月份/卫星/netcdf,该规则只能匹配两层目录下的netcdf,漏掉了卫星层级。
正确的wget命令
wget -r -np -nH -x -e robots=off --include-directories="*/netcdf" --exclude-directories="*/csv" -A "*.nc" https://satdat.ngdc.noaa.gov/sem/goes/data/full/
参数说明
-r:递归爬取目录-np:不爬取父目录,避免跳出/sem/goes/data/full/范围-nH -x:保留服务器原有的目录结构,不生成以域名命名的顶层目录-e robots=off:强制忽略robots.txt限制,这是突破服务器爬取限制的关键--include-directories="*/netcdf":匹配所有层级下的netcdf目录,确保只进入目标目录--exclude-directories="*/csv":排除所有csv目录,避免下载无关内容-A "*.nc":仅下载后缀为.nc的文件,过滤其他无关文件
可选优化
如果担心被服务器限流,可添加请求间隔或断点续传参数:
wget -r -np -nH -x -c --wait=1 -e robots=off --include-directories="*/netcdf" --exclude-directories="*/csv" -A "*.nc" https://satdat.ngdc.noaa.gov/sem/goes/data/full/
-c:断点续传,中断后可继续未完成的下载--wait=1:每次请求间隔1秒,降低被服务器封禁的风险
内容的提问来源于stack exchange,提问作者Roland
相关产品推荐
相关产品推荐

