第一个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年。爬取结果如下:
有了数据标识信息,我们可以进一步用爬虫的方式批量下载所需要的遥感影像(从地理空间数据云上批量下载遥感影像)