很多时间需要从网上选择性地下载数据,有一些数据是需要现在网页中输入参数,然后再submit, 新的网页就会显示数据. 这些网页会把参数项置于url中,直接对于url操作就可以获取相应的数据,比如下面一个链接是用来获取全球水位数据: 站点:ID 9075035 站名:Es**ville, MI 开始结束时间:bdate=20130101&edate=20130131 ………… 这个可以通过matlabàurlread函数来读取字符串,再利用regexp或者其他函数来遴选数据 但是有些网页数据,比如下面这个获取地球自由电子密度数据的网页:
填写好参数之后,提交:
很明显这个page的url中不包括任何的参数设置,而需要获取的数据可能成千上万,要用手动输入明显不现实。于是想到利用matlab来批处理下载所需数据。很明显这个page的url中不包括任何的参数设置,而需要获取的数据可能成千上万,要用手动输入明显不现实。于是想到利用matlab来批处理下载所需数据。以下为解决的方案: step 1à安装wget for windows 因为涉及到参数的填写,matlab自带的函数已经捉襟见肘,wget 是一个开源的库可以进行http ftp以及其他类型协议的下载(当然也可以用curl 库,但是没细找是否有windows version),wget 也将附在帖子后。 step 2à设置路径 安装完之后,需要把D:\Program Files\GnuWin32\bin文件夹下面5个文件复制到matlab工作路径(或者设置path即可,如果不行的话在电脑属性中的环境变量中把bin的路径加入)(也可以把wget.exe放到c:\windows下,使用命令提示符也可以下载)。 step 3à数据下载 - cmd=['wget --post-data',...
- ' "model=cgm&year=2000&height=100.&',...
- 'geo_flag=1&latitude=45.00&longitude=270.0',...
- '&profile=1&start=100.&stop=1000.&step=50.',...
- '&format=0&vars=01&vars=04&vars=05&linestyle=solid&',...
- 'charsize=&symbol=0&symsize=&imagex=640&imagey=480" ',... 'http://omniweb.gsfc.nasa.gov/cgi/vitmo/vitmo_model.cgi -O test_wget.txt']
- system(cmd, '-echo')
复制代码双引号中便是原网页中input 项,网页内容被保存在test_wget.txt。
利用matlab构造字符串很方便,然后进行批处理将会非常方便 wget功能非常强大,什么断点续传、断线重播之流全不在话下(完全可以PK迅雷了)。 详细的usage可以参照: system('wget --help', '-echo') % 或者system('wget -h', '-echo') matlab是个很包容的平台,本帖主要是拓展一个matlab的使用范围,希望有更多的实用技巧出现。
|