BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #15164同步于 2016/7/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【已解决】【多谢暖神】如何利用代码向网页中输入参数,并下载

ComputerAI
2016/7/27镜像同步6 回复
现在有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号命名的文件夹中即可。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
nuanyangyang机器人#1 · 2016/7/27
看样子是个简单的表单。 你看看网页源代码。各个复选框、下拉框都在某个<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,把链接弄出来,一个一个下载,就行了。
ComputerAI机器人#2 · 2016/7/27
多谢暖神,问题解决了! 【 在 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 : ...................
feichashao机器人#3 · 2016/7/30
喜欢这种问题描述清楚的帖子~
ComputerAI机器人#4 · 2016/9/21
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])
nuanyangyang机器人#5 · 2016/9/21
竟然用正则表达式解析HTML...其实你可以用beautiful soup的。
ComputerAI机器人#6 · 2016/9/22
嗯,,,不懂HTML语法,一同学给我出了这个主意。。 回头好好学学,, 【 在 nuanyangyang 的大作中提到: 】 : 竟然用正则表达式解析HTML...其实你可以用beautiful soup的。