社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python爬虫——获取NASA卫星数据

StataandPython数据分析 • 1 年前 • 357 次点击  

本文作者:于怡宁,河南大学中原发展研究院

本文编辑:兰博文

技术总编:李婷婷

Stata and Python 数据分析

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~


 

      



1.导读



      通常来说,卫星传感器获取的主要是地表的太阳辐射反射信号,而夜光卫星传感器独辟蹊径,采集的是夜间灯光、火光等产生的辐射信号。传感器在夜间工作,能探测到城市灯光甚至小规模居民地、车流等发出的低强度灯光,并使之区别于黑暗的乡村背景。因此夜间灯光影像可作为人类活动的表征,成为了人类活动监测研究的良好数据源;目前,夜间灯光数据主要用于城镇扩展研究,社会经济因子估算以及其它环境、灾害、渔业、能源等领域。 

      美国国家极地轨道环境卫星(NPP)可见红外成像辐射套件传感器(VIIRS)提供的夜间灯光数据,该卫星一天绕地球运行约14圈,每次绕行时间约102分钟。在绕行过程中,VIIRS传感器每隔6分钟成一次像,每天成像240次,成像幅宽为3060公里,成像分辨率为750米。近年来,越来越多的研究基于NPP/VIIRS夜间灯光数据刻画更加精细尺度的个体行为,下面介绍怎么批量获取该卫星数据。



2.具体操作

2


卫星数据官方的解释文档:

https://ladsweb.modaps.eosdis.nasa.gov/missions-and-measurements /products/VNP46A2#overview

VNP46A2产品把地球分成了18*36个网格。

再把10度*10度的网格分成了2400*2400份,每份的面积为500*500m,其中的数字代表该区域的灯光亮度。

下面使用wget来下载卫星数据,首先需要登录NASA官网按照步骤注册账号:

https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5000/VNP46A2/2019/001可以观察到前面的https://ladsweb.modaps.eosdis.nasa.gov /archive/allData/5000/VNP46A2都相同,2019数据的年份,001是第一天的数据,下面获取2019年第一天所有数据的下载地址:

import requestsfrom  lxml import etreeurl = "https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5000/VNP46A2/2019/001"headers = {    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"}res = requests.get(url=url,headers=headers)tree = etree.HTML(res.text)url_xpath = "//td[@class='product-cell']/a/@href"time_xpath = "//td[3]/text()"url_list = tree.xpath(url_xpath)time_list = tree.xpath(time_xpath)for i,j in zip(url_list,time_list):    url = "https://ladsweb.modaps.eosdis.nasa.gov" + i    print(url,j)

https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5000/VNP46A2/2020/001/VNP46A2.A2020001.h25v03.001.2021055120623.h5

h25中的h代表经度,v03中的v代表纬度,h25v03代表第26列第4行的数据。

下面使用wget来下载卫星数据:

https://eternallybored.org/misc/wget/

通过这个网址下载wget插件,然后将其放在python环境的根目录下。

登录账号密码后可以在此处获取wget的token:

下面是完整的代码:

#获取数据下载连接import requestsfrom  lxml import etree
url = "https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5000/VNP46A2/2019/001"headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"}res = requests.get(url=url,headers=headers)tree = etree.HTML(res.text)url_xpath = "//td[@class='product-cell']/a/@href"time_xpath = "//td[3]/text()"url_list = tree.xpath(url_xpath)time_list = tree.xpath(time_xpath)for i,j in zip(url_list,time_list): url = "https://ladsweb.modaps.eosdis.nasa.gov" + i    print(url,j)#批量下载所需的数据import osimport time import datetimeimport calendarimport requestsfrom subprocess import callfrom bs4 import BeautifulSoupfrom subprocess import call#存储所要区域的VIIRS分块tieList=['h25v03''h25v04''h25v05''h25v06''h25v07''h25v08']#所要的月份yearMonth=[2020,1]  #月份中所有天在该年的天数totalDay=calendar.monthrange(yearMonth[0],yearMonth[1])[1]baseDay=datetime.date(yearMonth[0],1,1)for day in range(1,totalDay+1): tempDay=datetime.date(yearMonth[0],yearMonth[1],day) dl=str(yearMonth[0])+str((tempDay-baseDay).days+1).zfill(3) webURL='https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5000/VNP46A2/'+dl[0:4]+'/'+dl[-3:] #构造下载日期的url webHTML=requests.get(webURL) soup=BeautifulSoup(webHTML.text,'html5lib') #使用bs4解析网页获取每个网格的数据下载地址 fileNameNode=soup.find_all('a',attrs={'class':'hide'}) for fnn in fileNameNode: fileName=fnn.text try: if fileName.split('.')[2] in tieList: fileURL='https://ladsweb.modaps.eosdis.nasa.gov'+fnn.get('href') print(fileURL) #构建wget命令 #字符串中要将你的AppKey替换成你的AppKey,在-p后面写上下载的数据所要保存的地址 wgetcmd='wget -e robots=off -m -np -R .html,.tmp -nH --cut-dirs=3 "'+fileURL+'" --header "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbF9hZGRyZXNzIjoieXluNjI2ODg5QGdtYWlsLmNvbSIsImlzcyI6IkFQUyBPQXV0aDIgQXV0aGVudGljYXRvciIsImlhdCI6MTcwMzc2MTQ3NywibmJmIjoxNzAzNzYxNDc3LCJleHAiOjE4NjE0NDE0NzcsInVpZCI6InN0YXJyeWJlcnJ5IiwidG9rZW5DcmVhdG9yIjoic3RhcnJ5YmVycnkifQ.3K9bKzttlQDBt02LgfRS2yvDKTKBDXC5WiXCRNNE6B0" -P E:/NASA数据/数据' #使用CMD调用wget进行下载 call(wgetcmd) except: pass

数据下载完成。


重磅福利! 为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐




基于情感词典的文本情感分析——以携程网景点评论为例
fre命令——展示变量的频率分布
Chatgpt|GPT在文本分析中的应用:一个基于Stata的集成命令用法介绍
数量经济技术经济研究|GPT在文本分析中的应用:一个基于Stata的集成命令用法介绍
变量的不同观测值个数统计——distinct和vardistinct
品诗雅谈的“诗词大会”——putdocx指令的使用
Stata答疑——专利个数知多少

Stata压缩和解压缩文件的几种方法

【python库——whisper】实现音频转换成文字功能

用Python进行乳腺癌预测的简单机器学习

足不出户的“世界之旅”

【爬虫实战】python文本分析库——Gensim

Python可视化-绘制三维空间空间图形
使用Stata遍历文件的多种方式

Python构造数据透视表

Python可视化-Bokeh库

今年的双十一,你加购了几本书籍呢

基于Python的文本摘要提取


     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/170119
 
357 次点击