欢迎光临散文网 会员登陆 & 注册

使用网络爬虫自动抓取长江水位和流量数据

2020-11-30 12:45 作者:ocean_tide  | 我要投稿

如下图所示,我们要从这个网站抓取长江主要站点的水位和流量数据。

首先使用urlread读取网页的内容,再找到数据所在的字符串

str=urlread('http://www.cjh.com.cn/sssqcwww.html')
以向家坝为例,1710就是流量,266.22是水位
'{"oq":"0","q":"1710","rvnm":"长江","stcd":"60103400","stnm":"向家坝","tm":1606701600000,"wptn":"5","z":"266.22"}'
接着我们使用正则化表达来提取这些数据
flow=regexp(str,'{"oq":"0","q":"\d*','match');  %提取流量 单位是m3/s
wl=regexp(str,'"wptn":"\d","z":"\S{2,10}"}','match'); %提取水位 单位是米
name=regexp(str,'"stnm":"\S{2,10}","tm":','match'); %提取观测站点名字
完整的程序如下,该程序会每小时运行一次,抓取数据并保存成mat文件:

j=1; %网站数据是逐时的,整点会更新,为了预防可能出现的延迟问题,建议12点的数据12点15分时才去爬取
while 0<1
 time(j,:)=datestr(now);
str=urlread('http://www.cjh.com.cn/sssqcwww.html');
%str1='{"oq":"0","q":"1710","rvnm":"长江","stcd":"60103400","stnm":"向家坝","tm":1606701600000,"wptn":"5","z":"266.22"}'
flow=regexp(str,'{"oq":"0","q":"\d*','match');  %流量 单位是m3/s
wl=regexp(str,'"wptn":"\d","z":"\S{2,10}"}','match'); %水位 单位是米
name=regexp(str,'"stnm":"\S{2,10}","tm":','match'); %观测站点名字
for i=1:length(flow)
    d(j,i)=str2num(flow{i}(16:end));  %0代表没有流量观测
end

for i=1:length(wl)
    sl(j,i)=str2num(wl{i}(17:end-2)); 
end
j=j+1
save('Yangtze.mat','time','d','sl','name')
pause(3600); %每隔一小时执行一次
end

使用网络爬虫自动抓取长江水位和流量数据的评论 (共 条)

分享到微博请遵守国家法律