DEM数据是我们经常用到的一种数据,小编今天就带大家一块看一下怎么用python来爬取地理空间数据云的30m的DEM数据。
我们要爬取DEM数据首先还是要有一个地理空间数据云的账号。小伙伴们如果没有的话,还是需要申请一个的地理空间数据云的账号。
地理空间数据云的网址:
http://www.gscloud.cn/
我们今天主要使用的是python的selenium库。我们要爬取数据,还要配置一下selenium。
1
selenium配置
selenium是自动调用浏览器下载数据,因此不用担心网站的反爬虫,也不用进行复杂的一些设置IP代理之类的。
我们本次使用谷歌浏览器配合selenium进行爬取数据。除了下载谷歌浏览器以外,我们还需要下载chromedriver,并且chromedriver要与谷歌浏览器的版本对应。
我们在谷歌浏览器的地址栏输入:chrome://version/,就会跳出如下的界面:
我们可以看到,我们谷歌浏览器的版本为81版本,我们找对应的chromedriver就可以。
chromedriver下载地址:
http://chromedriver.storage.googleapis.com/index.html
进入网址:
我们进去开头为81的某个链接,
我们还要瞅一眼notes(下图),可以看到标黄处显示支持81版本的谷歌浏览器,我们就可以安心的下载这个chromedriver了。我们返回上一页,选择win32的版本下载下来就可以,路径我们要记住,接下来要使用到。
下面我们看一下就要运行python的代码,这里我们需要修改下载路径和chromedriver的路径还有填写我们自己的账号密码:
代码语言:javascript复制from selenium import webdriver
import time
chrome_options = webdriver.ChromeOptions()
prefs = {
'download.default_directory':'修改为你的路径',#设置默认下载路径
"profile.default_content_setting_values.automatic_downloads":1
}
chrome_options.add_experimental_option('prefs', prefs)
#下面这行代码需要修改为你的chromedriver.exe路径
driver=webdriver.Chrome(executable_path='G:chromedriver_win32chromedriver.exe',
chrome_options=chrome_options)
driver.get('https://www.gscloud.cn/accounts/login')
email=driver.find_element_by_xpath('//*[@id="userid"]')
#填写账号
email.send_keys('你的账号')
password=driver.find_element_by_xpath('//*[@id="password"]')
#填写密码
password.send_keys('你的密码')
captcha=driver.find_element_by_xpath('//*[@id="id_captcha_1"]')
captcha_sj=input('请输入验证码:').strip()
captcha.send_keys(captcha_sj)
dr_buttoon=driver.find_element_by_xpath('//*[@id="login-form"]/input[3]').click()
time.sleep(3)
DEM=driver.find_element_by_xpath('/html/body/div[3]/div[3]/div[6]').click()
time.sleep(3)
GDEMV30=driver.find_element_by_xpath('//*[@id="dataset-listview"]/div/div/ul/li[3]/div/a[3]').click()
time.sleep(3)
#总共有2261页数据
page_num=2261
page=1
while page<=page_num:
print('当前下载第{}页'.format(page))
for tr_num in range(3,13):
d_everypage='//*[@id="all_datasets_listview"]/div/table/tbody/tr[{0}]/td[9]/div/div/a[2]/span'.format(str(tr_num))
download=driver.find_element_by_xpath(d_everypage)
driver.execute_script("arguments[0].click();", download)
time.sleep(20)
page = 1
page_sr=driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div/div[3]/div/div[2]/table/tbody/tr/td[10]/a/span/span/span')
driver.execute_script("arguments[0].click();", page_sr)
time.sleep(10)
代码运行以后,就会自动跳出谷歌浏览器的页面,我们把页面的验证码填到我们代码运行结果里面就可以啦!第一次运行有可能失败,重新运行一遍就好啦!
我们看看下载的数据,都是zip压缩包: