爬虫学习——批量在中国气象中心网站检索下载数据

批量在中国气象中心网站检索下载数据

前几天嗓子不舒服之后就病了,不过现在好一点。最近师哥喊我通过国家气象中心网站帮他下载时间跨度比较长的气象数据,但是这个网站对不同的数据集检索有日期要求,也就是说有的数据集一次只能检索3个月的数据,如果你要下载十年的数据,就要检索四十次,而且由于它输入日期的方式比较麻烦,所以检索起来很费时间。
所以现在教大家怎么通过python自动检索数据并添加到数据筐。
本次代码主要依靠selenium+Python,浏览器我用的是Chrome浏览器以及相应的驱动Chromedriver,selenium可以通过pip安装,Chromedriver要去网上下载与浏览器版本一致的安装包,具体安装过程自行百度。

import time
from selenium import webdriver

start_year=2000 # 初始年份 
end_year=2010 # 结束年份
driver= webdriver.Chrome()
driver.get('http://data.cma.cn/user/toLogin.html')
driver.refresh() # 刷新页面
driver.find_element_by_id("loginWeb").click()
vcode = input() # 在代码运行窗口(非浏览器窗口)填写验证码
print(vcode)
# 填写用户名 密码 验证码
driver.find_element_by_id("userName").send_keys("*******") # 填入用户名
driver.find_element_by_id("password").send_keys("********") # 填入密码
driver.find_element_by_id("verifyCode").send_keys(vcode)
driver.find_element_by_id("loginPage").click()
time.sleep(4)
for i in range(start_year,end_year+1):
 for j in range(1,5):
  driver.switch_to_window(driver.window_handles[0])
  driver.get("http://data.cma.cn/dataService/cdcindex/datacode/SURF_CLI_CHN_MUL_DAY_V3.0/show_value/normal.html") # 填入相应数据集检索页面的地址(就是输入日期页面的地址,该地址仅为示范)
  driver.find_element_by_id("dateS").clear()
  year = '%d' % i
  month =j*3 - 2
  start_month = '%d' % (month)
  end_month = '%d' % (month+2) # 月份间隔为3个月
  driver.find_element_by_id("dateS").send_keys(year+"-"+start_month)
  driver.find_element_by_id("dateE").clear()
  driver.find_element_by_id("dateE").send_keys(year+"-"+end_month)
  driver.find_element_by_class_name("search-bt1210").click()
  driver.switch_to_window(driver.window_handles[1])
  time.sleep(4)
  driver.find_element_by_id("buttonAddCar").click()
  time.sleep(4)
  driver.close()


代码运行完后去数据筐里生成订单即可。

注意:该网站一天订单数不能超过45个,又由于本次数据集只能隔两个月检索一次,所以年份跨度选为十一年,最终只会产生44个订单。另外,该代码中间需要手动输入验证码,如果想要自动识别验证码,可以尝试一下学习这个库pytesseract,但是我试过后发现效果不太好,故如果想自动识别该网站的验证码,可以通过机器学习自己训练。。。(由于本次下载就需要登陆一次就好了,故手动输入验证码就行了,不用那么麻烦了)

另外下载后为一堆装满下载链接的txt文件,可以合并成一个txt文件复制所有下载链接到迅雷(或许有批量导入的功能?)将 copy *.txt anyname.txt 写入空记事本保存为.bat格式文件在下载文件目录下双击运行即可将所有txt合并成一个名为anyname的txt文件。

能用代码完成的事还是用代码做的好!不要用点点点浪费自己的时间!

你可能感兴趣的:(小白的Python学习)