Python批量下载地理空间数据云数据!Python无所…
2018-09-18 06:45:43来源:博客园 阅读 ()
模拟登录
这里要用到两个包:requests和json。requests使用前得先安装:pip install requests。
In [3]:
进群:548377875 即可获取数十套PDF哦!
import requests
import json
打开地理空间数据云的登录页面。按F12进入开发者工具台,在Element栏目,我们找到登录的表单,可以看到提交到后台有6个参数:
- csrfmiddlewaretoken:经过多次测试,该值固定为“mzqcGIDTWJbmIo7UFTGI3gKYEotYMFEh”不变
- next:该值为空,但必须要有
- userid:为登录账号
- password:登录密码
- captcha_0:这是一个隐藏的参数,这个参数对应的验证码,可以直接复制过来
- captcha_1: 验证码
为了防止报403错误,我们得在请求中加入header和cookie,这个直接从浏览器中复制过来即可,但要把格式改成python字典形式。
数据准备好后,用requests.session()来发送请求,这样的话可以保存登录后的cookies,避免 接下来爬取数重新去拿cookies
In [4]:
def login(session):
url="http://www.gscloud.cn/accounts/validate" # 地理空间数据云的用户验证网址
data={
"csrfmiddlewaretoken":"mzqcGIDTWJbmIo7UFTGI3gKYEotYMFEh", # 在浏览器控制台获得
"next":"", # 在浏览器控制台获得,一定要有
"userid":"123456789@qq.com", # 登陆账户
"password":"123456789", # 登陆密码
"captcha_0":"9a27b5da81e71078d97226fd10ea23b47beb6ba7",
"captcha_1":"WFJG"
}
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
"Referer":"http://www.gscloud.cn/accounts/login",
"Accept": "application/json, text/javascript, */*; q=0.01"
}
cookie={"csrftoken":"mzqcGIDTWJbmIo7UFTGI3gKYEotYMFEh","_next_":"/"}
r=session.post(url=url,data=data,headers=headers,cookies=cookie)
code=json.loads(r.text)['code'] # 0代表登陆成功
if code==0:
print("登陆成功")
return 1
else:
print("登陆失败")
return 0
if __name__ == '__main__':
session=requests.session()
login(session)
获得指定数据列表
登录成功后,我们就可以下载数据了,下载数据前我们先查询想要的数据 这里我通过行列号来查询Landsat8数据:
- tableInfo:表示返回数据的基本配置,其中pagesize表示每页的数量
- productId:表示数据类型,Landsat8为411
- data:path和row表示数据的行列号范围
最后将所有数据名称保存在一个列表中
In [5]:
url="http://www.gscloud.cn/search/query"
data={
"tableInfo": '{"offset":0,"pageSize":100,"totalPage":10,"totalSize":96,"sortSet":[{"id":"datadate","sort":"desc"}],"filterSet":[{"id":"dataexists","value":"1"}]}',
"productId": 411,
"datatype": "OLI_TIRS",
"data": '{"path":"121-121","row":"40-40"}'}
r = session.post(url, data=data )dicts = json.loads(r.text)['data']
批量下载数据
获得数据列表后,就可以拼接下载链接,然后下载数据了
- cloud_cover表示云量,剔除云量过大的数据
- d_url:表示下载链接
因为遥感影像数据比较大,为了能在控制台看到下载进度,这里可以将下载分段进行,在请求中必须加上stream=True,然后通过respon.iter_content(chunk_size=chunk_size)设置每次下载的大小
In [ ]:
for ds in dicts:
cloud_cover = float(ds["cloudcover"]) #云量
if cloud_cover< 20.0:
size=0
d_url="http://www.gscloud.cn/sources/download/411/"+ds["dataid"]+"/bj" # 构建下载地址
d = session.get(d_url,stream=True)
chunk_size=1024000 #每次下载数据的大小
content_size=int(d.headers['content-length']) #文件总大小
print("文件总大小为:"+str(content_size/1024/1024))
with open("data/"+ds["dataid"]+".tar.gz", "wb") as code:
for data in d.iter_content(chunk_size=chunk_size):
code.write(data)
size+=len(data) #已下载文件大小
print('已经下载:%.4f %%' % (size*100.00/content_size))
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash