因为工作需要所以要通过爬虫自动下载NASA网站的卫星影像数据,但是一般爬虫下载是通过Python进行下载的,但是项目主体为JAVA环境,便于集成,所以用java写了爬虫程序。
因为是下载网页中的数据,所以需要通过网站找到对应的下载链接,然后通过代码程序去使用下载链接去下载。
具体步骤如下
首先我们进入NASA数据查询网站 https://search.earthdata.nasa.gov/search 然后输入自己查询所需的经纬度范围以及日期(已modis为例)
然后我们发现对应的Modis/Aqua 的数据以及显示在下面了,点击进入,显示具体的详细HDF数据
然后我们再点击下载按钮,(已登录状态)进入下载列表找到对应的HDF 进行下载,这时候就能下载到所需的hdf了,
当然,这是人工手动进行下载数据,如何进行自动爬虫下载呢,所以需要进行分析
1.下载需要知道下载链接,我们通过人工手动去下载,然后知道modis的数据的下载链接为
https://nrt3.modaps.eosdis.nasa.gov/archive/allData/61/MOD03/2019/232/MOD03.A2019232.0250.061.NRT.hdf
然后我们进行分析
其中“https://nrt3.modaps.eosdis.nasa.gov/archive/allData/61/” 应该是他的下载地址前缀,包含61类型之类的
“MOD03” 遥感器 、 “2019/232” 日期 : /年/一年的第多少天 、“MOD03.A2019232.0250.061.NRT.hdf” 具体的文件名
然后我们可以分析得出
下载链接为:可知参数(https://nrt3.modaps.eosdis.nasa.gov/archive/allData/61/MOD03/2019/232/)+未知文件名(MOD03.A2019232.0250.061.NRT.hdf)
所以现在下载链接问题变为如何知道 如何知道某个时间段,某个未知,具体影像文件名为什么。(找文件名)
然后我们可以从查询完的结果发现查询的文件名的列表
然后打开控制台,筛选找到对应的列表JSON
但是,问题来了
这个JSON请求是个POST请求......有点难搞
但是不要慌,我们可以看到JSON中存在一个链接
具体为:
https://cmr.earthdata.nasa.gov/search/granules.json?bounding_box=118.24804687500001%2C33.908203125%2C123.46875%2C36.52734375&echo_collection_id=C1426422512-LANCEMODIS&page_num=1&page_size=20&sort_key%5B%5D=-start_date&temporal=2019-08-20T00%3A00%3A00.000Z%2C2019-08-21T23%3A59%3A59.000Z
然后输入地址栏发现,这就是对应的get请求,而且里面包含了对应的所有列表,和对应的信息
真棒,得来全不费工夫,然后我们可以发现这个链接里面包含了,经纬度、page_num、开始日期、结束日期
https://cmr.earthdata.nasa.gov/search/granules.json?bounding_box="+(经纬度)+" &echo_collection_id=C1426422512-LANCEMODIS&page_num=1&page_size=20&sort_key%5B%5D=-start_date&temporal="+(开始日期)+" T00%3A00%3A00.000Z%2C"+(结束日期)+" T23%3A59%3A59.000Z
这样我们就能通过链接去查询对应的影像信息
得到具体的下载链接下载的方式有多种多样,我最开始通过HttpClient 下载 ,然后发现在网络波段不太好的情况下,emmm不好用。
然后我看到官网自带推荐的wget下载方式
wget -e robots=off -m -np -R .html,.tmp -nH --cut-dirs=4 "https://nrt3.modaps.eosdis.nasa.gov/api/v2/content/archives/allData/61/MYD02QKM/2019/189/MYD02QKM.A2019189.0450.061.NRT.hdf" --header "Authorization: Bearer 你的密钥" -O 下载地址
然后发现,哎哟,还挺好用的,当然,密钥是你登陆之后可以创建的东西,(至于怎么注册,应该很简单,应该过段时间就可以通过)
然后通过java去执行cmd 使用wget下载,也可以通过调整参数调整是否显示黑窗下载、下载改名灯。具体的下载方法不再这阐述,可自行百度。
出现吧,黑窗大军!!!!!!!!!!!!!!!!!
然后具体的就这些,具体的代码就不粘贴了。。。。有点菜。只是把自己的思路记录一下