使用网络爬虫下载PSMSL全球月平均水位数据
PSMSL网站如下(https://www.psmsl.org/data/obtaining/)

一共有2630个验潮站,网络下载函数用MATLAB提供的urlwrite,因为部分站点没有RLR格式的数据(基准统一格式),所以下载会报错,这里使用try,catch函数来解决这个问题。
for i=1:2360 %2360
i
u1='https://www.psmsl.org/data/obtaining/rlr.monthly.data/';
u2='.rlrdata';
url=[u1,num2str(i),u2];
file=[num2str(i),'.txt'];
try
[f,status]=urlwrite(url,file);
catch
continue
end
end
对于每个站点的名字,经纬度,我们用正则匹配的方法来获取,程序如下:
ss=urlread('https://www.psmsl.org/data/obtaining/');
s1=regexp(ss,'/stations/\d*.php','match'); %站点ID
s2=regexp(ss,'</a></p></td><td><p>\s*\S*</p></td><td><p>\s*\S*</p>','match');%站点经纬度
id=zeros(1548,3,'double');%第1列为站点id,第2列为站点纬度,第3列为站点经度
for i=1:length(s1)
ss1=s1{i};ss2=s2{i};ss3=regexp(ss2, '\S\d*\.\d*', 'match' );
id(i,1)=str2double(ss1(11:end-4));
end
for i=1:length(s1)
ss2=s2{i};ss3=regexp(ss2, '\S\d*\.\d*', 'match' );
id(i,2)=str2double(ss3{1});
id(i,3)=str2double(ss3{2});
end
s3=regexp(ss,'<tr><td>.{1,40}</td><td><p>','match');
for i=1:length(s1)
s4=s3{i};
name{i}=s4(9:end-12); %验潮站的名字
end