更改URL的脚本

时间:2014-05-23 00:33:09

标签: python perl wget

我在编写可执行以下操作的流程或脚本时遇到一些麻烦:

我需要从以下网址获取数据:

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的东西,我都是耳朵。先感谢您。

3 个答案:

答案 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