我在编写可执行以下操作的流程或脚本时遇到一些麻烦:
我需要从以下网址获取数据:
nomads.ncep.noaa.gov/dods/gfs_hd/gfs_hd20140430/gfs_hd_00z
但文件URL(日期和模型运行更改),因此它必须假设变量的这个基本结构。
Y - Year
M - Month
D - Day
C - Model Forecast/Initialization Hour
F- Model Frame Hour
像这样:
nomads.ncep.noaa.gov/dods/gfs_hd/gfs_hdYYYYMMDD/gfs_hd_CCz
此脚本将运行,然后使用编码的那些变量导入该日期(在YYYYMMDD以及CC中) -
因此,虽然任务是
http://nomads.ncep.noaa.gov/dods/gfs_hd/gfs_hd20140430/gfs_hd_00z
虽然这些变量对应于以下格式获取当前日期:
http://nomads.ncep.noaa.gov/dods/gfs_hd/gfs_hdYYYYMMDD/gfs_hd_CCz
您能否告知如何获取网址,以此格式查找最新日期?无论是剧本还是wget的东西,我都是耳朵。先感谢您。
答案 0 :(得分:0)
在Python
中,requests
库可用于获取网址。
您可以使用基本网址字符串的组合生成URL,并使用datetime
类及其timedelta
方法结合其strftime
方法生成时间戳,以生成日期以所需格式。
即。首先获取datetime.datetime.now()
的当前时间,然后在循环中通过timedelta
减去一小时(或您认为他们正在使用的任何时间渐变)并继续使用{{1}检查网址}} 图书馆。第一个你看到的是最新版本,然后你可以做任何进一步的处理。
如果您需要抓取页面内容,requests
可以正常使用。
答案 1 :(得分:0)
我尝试在http://nomads.ncep.noaa.gov/dods/gfs_hd处将索引向上扫描一级;最后一个特定形式的链接应该带你到每日下载页面,在那里你可以做类似的事情。
以下是抓取每日下载页面的大纲:
import BeautifulSoup
import urllib
grdd = urllib.urlopen('http://nomads.ncep.noaa.gov/dods/gfs_hd/gfs_hd20140522')
soup = BeautifulSoup.BeautifulSoup(grdd)
datalinks = 'http://nomads.ncep.noaa.gov:80/dods/gfs_hd/gfs_hd'
for link in soup.findAll('a'):
if link.get('href').startswith(datalinks):
print('Suitable link: ' + link.get('href')[len(datalinks):])
# Figure out if you already have it, choose if you want info, das, dds, etc etc.
并且最后三十页抓取页面当然会非常相似。
答案 2 :(得分:0)
最简单的解决方案就是镜像父目录:
wget -np -m -r http://nomads.ncep.noaa.gov:9090/dods/gfs_hd
但是,如果您只想要最新日期,可以使用Mojo::UserAgent
Mojocast Episode 5
use strict;
use warnings;
use Mojo::UserAgent;
my $url = 'http://nomads.ncep.noaa.gov:9090/dods/gfs_hd';
my $ua = Mojo::UserAgent->new;
my $dom = $ua->get($url)->res->dom;
my @links = $dom->find('a')->attr('href')->each;
my @gfs_hd = reverse sort grep {m{gfs_hd/}} @links;
print $gfs_hd[0], "\n";
2014年5月23日,输出:
http://nomads.ncep.noaa.gov:9090/dods/gfs_hd/gfs_hd20140523