返回信息流现在有400条数据,每条数据包含4个经纬度值和1个年份值。需要进入某网页,然后在相应的地方输入这个5个值,并进行其他选项的相关选择。设置后,点击按钮会生成一个网页,上面有365/366(平年/闰年)个下载链接,最后按照这个链接下载相应的数据。数据条数略多,想批量处理下载。
我是北师大的学生,没有网络编程的知识,不知道如何下手。请问北邮的同学们,这个过程要怎样用代码实现,有多复杂?要是非常复杂的话,请人帮忙要大概花多少钱 ?
网页地址:http://disc.sci.gsfc.nasa.gov/daac-bin/FTPSubset2.pl
(1)“Data Product”部分。选择“MERRA-2 tavg1_2d_aer_Nx: 2d,1-Hourly,Time-averaged,Single-Level,Assimilation,Aerosol Diagnostics V5.12.4 (tavg1_2d_aer_NX)”选项(这一部分选的不同,下面Parameters部分的内容也会不同)。
(2)“Spatial Search”部分。输入West,North,South,East四个经纬度数据,然后点击“Update Map”(若不点击,则输入的值无效)。
(3)“Temporal Order Option部分”。Start Yr和End Yr框里输入年份,Start Mon为默认的JAN,Start Day为默认的01,End Mon为默认的DEC,End Day为默认的31。即时间跨度是A年1月1日到A年12月31日这一整年的数据。
(4)“Parameters”部分。只勾选倒数第二行的“TOTEXTTAU = …”这一栏,其他的都不选。
(5)“Additional Options”部分。不选任何,即默认值。
(6)“Regridding Options”部分。两个选项内都选“NONE”,即默认值。
(7)“Output File Format”部分。选择“NetCDF4”,即默认值。
然后,点击“Start Search”按钮,
生成新的网页,下载扩展名为.nc的文件到以ID号命名的文件夹中即可。
这是一条镜像帖。来源:北邮人论坛 / python / #15164同步于 2016/7/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
【已解决】【多谢暖神】如何利用代码向网页中输入参数,并下载
ComputerAI
2016/7/27镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
看样子是个简单的表单。
你看看网页源代码。各个复选框、下拉框都在某个<form>元素里。当点击那个start search的时候,那个按钮就是“submit”按钮,会把表单的内容发给<form>里的action=xxx指定的地方。
<form>里说是用post方式,但实际点击以后会发现是用get方式发送到类似这样的地址去: http://goldsmr5.gesdisc.eosdis.nasa.gov/cgi-bin/dpool/HTTP_DpFileDownloadMERRA2.pl?DATASET=MERRA_DP&FCP_DIR=/ftp/private/tmp/&APPLICATION=SUBSET_MERRA2&FILTER=SUBSET_MERRA2&SUB_LONMIN=-180&SUB_LONMAX=180&SUB_LATMAX=90&SUB_LATMIN=-90&OUTPUT_FORMAT=nc4&LOOKUPID_List=M2I3NPASM&STARTYR=1980&STARTMON=03&STARTDAY=01&ENDYR=1980&ENDMON=12&ENDDAY=21&PREGRID=NONE&levels=2&levels=15&&variable=o3&variable=qi&&time1=00&time2=03&meanValue=1
那个问号后面会以name=value&name=value&...这样的形式把表单里的域编码。你如果想自动化处理,只要对照着form里各个项目的名称、值,构造自己的URL,发送出去,服务器就会回应页面。然后你用beautifulsoup解析一下html,把链接弄出来,一个一个下载,就行了。
多谢暖神,问题解决了!
【 在 nuanyangyang 的大作中提到: 】
: 看样子是个简单的表单。
: 你看看网页源代码。各个复选框、下拉框都在某个<form>元素里。当点击那个start search的时候,那个按钮就是“submit”按钮,会把表单的内容发给<form>里的action=xxx指定的地方。
: <form>里说是用post方式,但实际点击以后会发现是用get方式发送到类似这样的地址去: http://goldsmr5.gesdisc.eosdis.nasa.gov/cgi-bin/dpool/HTTP_DpFileDownloadMERRA2.pl?DATASET=MERRA_DP&FCP_DIR=/ftp/private/tmp/&APPLICATION=SUBSET_MERRA2&FILTER=SUBSET_MERRA2&SUB_LONMIN=-180&SUB_LONMAX=180&SUB_LATMAX=90&SUB_LATMIN=-90&OUTPUT_FORMAT=nc4&LOOKUPID_List=M2I3NPASM&STARTYR=1980&STARTMON=03&STARTDAY=01&ENDYR=1980&ENDMON=12&ENDDAY=21&PREGRID=NONE&levels=2&levels=15&&variable=o3&variable=qi&&time1=00&time2=03&meanValue=1
: ...................
import requests
import re
import urllib
import xlrd
import os
in_file = "D:/info.xlsx"
des_folder = "D:/aeronet_400_sites/"
# load info
data = xlrd.open_workbook(in_file)
table = data.sheet_by_name(u'Sheet1')
nrows = table.nrows
ncols = table.ncols
data_list = []
for i in range(nrows-1):
tmp = table.row_values(i+1)
tmp1 = (int(tmp[0]), tmp[1], tmp[2], tmp[3], tmp[4], int(tmp[5]))
data_list.append(tmp1)
# build urls
value = 'M2T1NXAER'
for i in range(0, len(data_list)):
no, west, north, south, east, year = data_list[i]
folder = des_folder + str(no) + '/'
if (os.path.exists(folder) == False):
os.mkdir(folder)
target_url = 'http://goldsmr5.gesdisc.eosdis.nasa.gov/cgi-bin/dpool/' \
'HTTP_DpFileDownloadMERRA2.pl?DATASET=MERRA_DP&FCP_DIR=/ftp/' \
'private/tmp/&APPLICATION=SUBSET_MERRA2&FILTER=SUBSET_MERRA2&' \
'SUB_LONMIN=' + str(west) + '&SUB_LONMAX=' + str(east) + \
'&SUB_LATMAX=' + str(north) + '&SUB_LATMIN=' + str(south) + \
'&OUTPUT_FORMAT=nc4&LOOKUPID_List=' + value + '&STARTYR=' + \
str(year) + '&STARTMON=01&STARTDAY=01&ENDYR=' + str(year) + \
'&ENDMON=12&ENDDAY=31&variable=totexttau&'
response = requests.get(target_url)
pattern = re.compile('<tr><td><a href="(.*?)">(.*?)</a></td></tr>')
href = pattern.findall(response.text)
#for url_name in href:
for j in range(0, len(href)):
url_name = href[j]
tmp_f = urllib.urlretrieve(url_name[0], filename=folder+url_name[1])
嗯,,,不懂HTML语法,一同学给我出了这个主意。。
回头好好学学,,
【 在 nuanyangyang 的大作中提到: 】
: 竟然用正则表达式解析HTML...其实你可以用beautiful soup的。