爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6731|回复: 6

[源程序] matlab批量下载网站上的文件

[复制链接]

新浪微博达人勋

发表于 2014-2-17 11:57:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
转载自:
  1. http://www.ilovematlab.cn/thread-122392-1-1.html
复制代码



前几天美国数学建模成绩出了,我们按照网址下载了自己的证书,另外想看看学校今年的获奖情况,由于学校的参赛队伍数众多,一个一个下载证书再统计显得麻烦,于是想自己用matlab开发一个小程序以实现同类型文件的批量下载。很多网站上有介绍使用Windows API 函数URLDownloadToFile,但是这个在VC上实现容易,要把它移植到matlab上还得使用MEX,有点麻烦了。这几天一直徘徊个大小网站,没有找到相关信息。最后还是自己使用lookfor找到需要的函UrlWrite,调用这个函数轻松搞定批量下载!
以下是代码:


%使用matlab下载网站上的文件

%使用urlwrite函数下载网站上的文件

%特别适用于批量下载同类型的文件

% Created by longwen36 2011-4-16

%使用urlwrite实现批量下载

%以下载2011美赛数模证书为例

clc,clear;

num = 11701:11710;

URLs = cell(size(num));

folder_filenames = cell(size(num));

filenames = cell(size(num));

for idx  = 1:length(num);

    URLs{idx} = sprintf('http://www.comap-math.com/mcm/2011Certs/%d.pdf',num(idx));

    filenames{idx} = sprintf('%d.pdf',num(idx));

end

tic;

for idx = 1:length(num);

    fprintf(1,'正在下载%s...\n',filenames{idx});

    [f, status] = urlwrite(URLs{idx},filenames{idx});

    if status == 1;

        fprintf(1,'%s成功下载!\n',filenames{idx});

    else

        fprintf(1,'%s下载失败!\n',filenames{idx});

    end

end

etime = toc;

fprintf('总下载文件数:%d,总耗时:%fs\n',length(num),etime);




MatlabUrlDownloadToFile.m (1.32 KB, 下载次数: 8, 售价: 5 贡献)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-2-18 13:47:47 | 显示全部楼层
matlab 果然很全能啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-25 10:44:13 | 显示全部楼层
非常有用!
仿照这个写了个批量下载CMIP5数据的.m文件,其实就是改改文件名而已
  1. num1=0201:10:0691;
  2. num2=0210:10:0700;
  3. URLs = cell(size(num1));
  4. folder_filenames = cell(size(num1));
  5. filenames = cell(size(num1));
  6. for idx  = 1:length(num1);
  7.     URLs{idx} = sprintf('http://esg.lasg.ac.cn/thredds/fileServer/esg_dataroot/FGOALS/CMIP5/output/LASG-CESS/FGOALS-g2/piControl/mon/atmos/ts/r1i1p1/ts_Amon_FGOALS-g2_piControl_r1i1p1_0%d01-0%d12.nc',num1(idx),num2(idx));
  8.     filenames{idx} = sprintf('ts_Amon_FGOALS-g2_piControl_r1i1p1_0%d01-0%d12.nc',num1(idx),num2(idx));  % 没有添加路径名表示把下载文件放在当前路径
  9. end
  10. tic;
  11. for idx = 1:length(num1);
  12.     fprintf(1,'正在下载%s...\n',filenames{idx});
  13.     [f, status] = urlwrite(URLs{idx},filenames{idx});
  14.     if status == 1;
  15.         fprintf(1,'%s成功下载!\n',filenames{idx});
  16.     else
  17.         fprintf(1,'%s下载失败!\n',filenames{idx});
  18.     end
  19.    
  20. end
  21. etime = toc;
  22. fprintf('总下载文件数:%d,总耗时:%fs\n',length(num1),etime);
复制代码



密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-8 16:21:03 | 显示全部楼层
本帖最后由 fghjnn 于 2015-5-8 17:07 编辑

你好,能请问下我想下载tmi的温度数据,改了一下代码,但是一直显示正在下载,能帮我看看是什么原因吗

num = 20070101:20070131;
URLs = cell(size(num));
folder_filenames = cell(size(num));
filenames = cell(size(num));
for idx  = 1:length(num);
     URLs{idx} = sprintf('http://data.remss.com/tmi/bmaps_v07.1/y2007/m01/tmi_%dv7.1.gz',num(idx));
     filenames{idx} = sprintf('tmi_%dv7.1.gz',num(idx));
end
tic;
for idx = 1:length(num);
     fprintf(1,'正在下载%s...\n',filenames{idx});
     [f, status] = urlwrite(URLs{idx},filenames{idx});
     if status == 1;
         fprintf(1,'%s成功下载!\n',filenames{idx});
     else
         fprintf(1,'%s下载失败!\n',filenames{idx});
     end
end
etime = toc;
fprintf('总下载文件数:%d,总耗时:%fs\n',length(num),etime);

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-8 17:10:04 | 显示全部楼层
额,可能是网速问题,5分钟下一个1兆多的数据,也挺醉的,谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-2 19:56:22 | 显示全部楼层
好东西 好东西  顶起
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-19 07:13:37 | 显示全部楼层
谢谢分享,楼主
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表