【爬虫】根据月份从地理空间数据云上爬取遥感影像信息

第一个for循环输入年份
第二个while循环遍历该年下的所有数据条目并提取符合月份要求的数据条目信息

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

def out_excel(in_list,out_workspace,filename):
	#输出符合条件的遥感影像条目
	import os
	result_path=os.path.join(out_workspace,filename)
	result=open(result_path,'w')
	for m in range(len(in_list)):
		for n in range(len(in_list[m])):
			result.write(str(in_list[m][n]))
			result.write('\t')
		result.write('\n')
	result.close()


def extract_data(satellite,num,cloud,year_range,month_range):
	#num是条带号和行编号,比如num=[123,40]
	[x_num,y_num]=num
	year=[str(i) for i in year_range]
	#各个卫星及其对应的表单网址,如有需要可以自行添加新卫星的名称和对应网站
	dict1={}
	dict1['LT4_5']='http://www.gscloud.cn/sources/accessdata/243?pid=1'#TM传感器
	dict1['LC8']='http://www.gscloud.cn/sources/accessdata/411?pid=263'#OLI传感器
	dict1['LE7_off']='http://www.gscloud.cn/sources/accessdata/241?pid=263'#ETM传感器
	dict1['LE7_on']='http://www.gscloud.cn/sources/accessdata/242?pid=1'#ETM传感器
	#
	driver.get(dict1[satellite])
	time.sleep(3)
	B=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[1]/td[3]/div/input')
	B.send_keys(str(x_num))
	C=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[1]/td[4]/div/input')
	C.send_keys(str(y_num))
	E=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[1]/td[6]/div/input')
	E.send_keys(str(cloud))

	r=[]
	for j in range(len(year)):
		D=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[1]/td[5]/div/input')
		D.clear()
		D.send_keys(year[j])
		D.send_keys(Keys.ENTER)
		time.sleep(3)

		#跳过空条目的年份
		q=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[3]/td').text
		if str(q)=="没有记录!":continue

		while True:
			#把同一页每一行数据的信息存入list1中;list1=[[数据标识],[日期],[云量],[数据有无]]
			list1=[[],[],[],[]]
			x=driver.find_elements_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr')
			for i in range(3,len(x)+1):
				date=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[{}]/td[5]'.format(i)).text
				month=date.split('-')[1]
				if int(month)>=month_range[0] and int(month)<=month_range[1]:
					biaoshi=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[{}]/td[2]'.format(i))
					cloud=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[{}]/td[6]'.format(i))
					youwu=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div[1]/table/tr[{}]/td[9]'.format(i))
					list1[0].append(biaoshi.text)
					list1[1].append(date)
					list1[2].append(cloud.text)
					list1[3].append(youwu.text)
			print(list1)
			
			for k in range(len(list1[0])):
				n=[]
				[n.append(i[k]) for i in list1]
				r.append(n)

			#判断是否可以往下翻页,可以的话就翻页
			i=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[3]/div[2]/table/tr/td[10]/a')
			if i.get_attribute("class")=="l-btn l-btn-plain":
				i.click()
				time.sleep(4)
			else:
				break

	return r

satellite_list=['LT4_5','LE7_on','LE7_off','LC8']#这里添加你想要搜索的卫星
year=[str(i) for i in range(2001,2004)]#这里添上需要的年份
driver=webdriver.Chrome(executable_path=r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
out_datalist=[]
for satellite in satellite_list:
	r=extract_data(satellite,[124,39],10,year,[6,8])
	out_datalist+=r
out_excel(out_datalist,r'C:\Users\23932\Desktop\毕设','kk.xls')

条件是,6,8月;云量小于10%,条带号和行列号是124/039,年份2001-2003年。爬取结果如下:
在这里插入图片描述

有了数据标识信息,我们可以进一步用爬虫的方式批量下载所需要的遥感影像(从地理空间数据云上批量下载遥感影像

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值