使用網(wǎng)絡(luò)爬蟲下載PSMSL全球月平均水位數(shù)據(jù)
PSMSL網(wǎng)站如下(https://www.psmsl.org/data/obtaining/)

一共有2630個(gè)驗(yàn)潮站,網(wǎng)絡(luò)下載函數(shù)用MATLAB提供的urlwrite,因?yàn)椴糠终军c(diǎn)沒有RLR格式的數(shù)據(jù)(基準(zhǔn)統(tǒng)一格式),所以下載會(huì)報(bào)錯(cuò),這里使用try,catch函數(shù)來解決這個(gè)問題。
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
對于每個(gè)站點(diǎn)的名字,經(jīng)緯度,我們用正則匹配的方法來獲取,程序如下:
ss=urlread('https://www.psmsl.org/data/obtaining/');
s1=regexp(ss,'/stations/\d*.php','match'); %站點(diǎn)ID
s2=regexp(ss,'</a></p></td><td><p>\s*\S*</p></td><td><p>\s*\S*</p>','match');%站點(diǎn)經(jīng)緯度
id=zeros(1548,3,'double');%第1列為站點(diǎn)id,第2列為站點(diǎn)緯度,第3列為站點(diǎn)經(jīng)度
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); %驗(yàn)潮站的名字
end