自动将数据输入网页并下载结果
Automatically input data into webpage and download the result
我正在尝试自动将值输入到此网页
http://predict.habhub.org/
并下载按下 运行 预测按钮时创建的结果 csv 文件。
我希望能够多次执行此操作(初始参数的 90 种不同组合),我可以使 for 循环正常,但无法使用代码将此信息输入网站。
altitudes = [32000, 33000, 34000]
ascentRates = [3.0, 3.5, 4.0, 4.5, 5.0, 5.5]
descentRates = [11, 13, 15, 17, 19]
for altitude in altitudes:
for ascent in ascentRates:
for descent in descentRates:
print(altitude)
print(ascent)
print(descent)
print("")
这可能真的很简单,但是,由于我的编程知识有限,我真的不知道从哪里开始。我试图用 python(urllib/requests) 来做到这一点,但我没有取得任何进展。希望有人能给我指出正确的方向。
requests
模块是(可以说是唯一)涉及 HTTP 和 Python 的正确选择。
在这种情况下,您需要 "POST"(上传)您的数据到服务器(参见 requests documentation)。
现在您必须弄清楚 "POSTed" 从哪里获取什么样的数据。例如,使用 Chrome 的 Web 检查器,您可以看到以下数据已发布到 http://predict.habhub.org/ajax.php?action=submitForm
:
launchsite=Other&lat=52.2135&lon=0.0964&initial_alt=0&hour=21&min=48&second=0&day=23&month=6&year=2017&ascent=5&burst=30000&drag=5&submit=Run+Prediction
您现在必须创建一个可以输入 requests.post() 的有效负载字典。在这个字典中,您可以将值调整为您想要发送到服务器的任何值(请注意,该表单使用与示例数据不同的标识符:burst = altitude,drag = descentRate):
import requests
payload = {'launchsite': 'Other', 'lat': '52.2135', 'lon': '0.0964', 'initial_alt': '0', 'hour': '21', 'min': '48', 'second': '0', 'day': '23', 'month': '6', 'year': '2017', 'ascent': '5', 'burst': '30000', 'drag': '5', 'submit': 'Run+Prediction'}
url = 'http://predict.habhub.org/ajax.php?action=submitForm'
r = requests.post(url, payload)
如果一切顺利,您应该已经收到一些包含您的 uuid 的 json 数据,您可以按如下方式提取这些数据:
uuid = r.json()['uuid']
现在您可以下载并存储您的 csv 数据:
csv_url = 'http://predict.habhub.org/preds/{}/flight_path.csv'.format(uuid)
r = requests.get(csv_url)
with open('flight_path.csv', 'w') as f:
f.write(r.text)
表彰Jkm解决了我的困境!
对于遇到类似问题的任何人,这里是我的最终代码:
import requests
import json
#The date must be in the future for this to work!
launchSite = 'Other' #Don't change this line
latitude = 39.0063
longitude = -104.8841
launchAltitude = 2212
launchHour = 15 #For colorado add 6hrs to local time(MDT)
launchMinute = 0
launchSecond = 0
launchDay = 24
launchMonth = 6 #this must be a number(ie June = 6)
launchYear = 2017
ascentRates = [3.0, 3.5, 4.0, 4.5, 5.0, 5.5]
burstAltitudes = [32000, 33000, 34000]
descentRates = [11, 13, 15, 17, 19]
for burstAltitude in burstAltitudes:
for ascent in ascentRates:
for descent in descentRates:
print(burstAltitude)
print(ascent)
print(descent)
print("")
payload = {'launchsite': launchSite, 'lat': latitude, 'lon': longitude, 'initial_alt': launchAltitude, 'hour': launchHour,
'min': launchMinute, 'second': launchSecond, 'day': launchDay, 'month': launchMonth, 'year': launchYear, 'ascent': ascent,
'burst': burstAltitude, 'drag': descent, 'submit': 'Run+Prediction'}
url = 'http://predict.habhub.org/ajax.php?action=submitForm'
r = requests.post(url, payload)
print(r.text)
uuid = r.json()['uuid']
csv_url = 'http://predict.habhub.org/preds/{}/flight_path.csv'.format(uuid)
r = requests.get(csv_url)
name = 'burst=' + str(burstAltitude) +' ascent=' + str(ascent) + ' descent=' + str(descent)
with open('predicted_%s.csv' % name, 'w') as f:
f.write(r.text)
我正在尝试自动将值输入到此网页 http://predict.habhub.org/ 并下载按下 运行 预测按钮时创建的结果 csv 文件。 我希望能够多次执行此操作(初始参数的 90 种不同组合),我可以使 for 循环正常,但无法使用代码将此信息输入网站。
altitudes = [32000, 33000, 34000]
ascentRates = [3.0, 3.5, 4.0, 4.5, 5.0, 5.5]
descentRates = [11, 13, 15, 17, 19]
for altitude in altitudes:
for ascent in ascentRates:
for descent in descentRates:
print(altitude)
print(ascent)
print(descent)
print("")
这可能真的很简单,但是,由于我的编程知识有限,我真的不知道从哪里开始。我试图用 python(urllib/requests) 来做到这一点,但我没有取得任何进展。希望有人能给我指出正确的方向。
requests
模块是(可以说是唯一)涉及 HTTP 和 Python 的正确选择。
在这种情况下,您需要 "POST"(上传)您的数据到服务器(参见 requests documentation)。
现在您必须弄清楚 "POSTed" 从哪里获取什么样的数据。例如,使用 Chrome 的 Web 检查器,您可以看到以下数据已发布到 http://predict.habhub.org/ajax.php?action=submitForm
:
launchsite=Other&lat=52.2135&lon=0.0964&initial_alt=0&hour=21&min=48&second=0&day=23&month=6&year=2017&ascent=5&burst=30000&drag=5&submit=Run+Prediction
您现在必须创建一个可以输入 requests.post() 的有效负载字典。在这个字典中,您可以将值调整为您想要发送到服务器的任何值(请注意,该表单使用与示例数据不同的标识符:burst = altitude,drag = descentRate):
import requests
payload = {'launchsite': 'Other', 'lat': '52.2135', 'lon': '0.0964', 'initial_alt': '0', 'hour': '21', 'min': '48', 'second': '0', 'day': '23', 'month': '6', 'year': '2017', 'ascent': '5', 'burst': '30000', 'drag': '5', 'submit': 'Run+Prediction'}
url = 'http://predict.habhub.org/ajax.php?action=submitForm'
r = requests.post(url, payload)
如果一切顺利,您应该已经收到一些包含您的 uuid 的 json 数据,您可以按如下方式提取这些数据:
uuid = r.json()['uuid']
现在您可以下载并存储您的 csv 数据:
csv_url = 'http://predict.habhub.org/preds/{}/flight_path.csv'.format(uuid)
r = requests.get(csv_url)
with open('flight_path.csv', 'w') as f:
f.write(r.text)
表彰Jkm解决了我的困境!
对于遇到类似问题的任何人,这里是我的最终代码:
import requests
import json
#The date must be in the future for this to work!
launchSite = 'Other' #Don't change this line
latitude = 39.0063
longitude = -104.8841
launchAltitude = 2212
launchHour = 15 #For colorado add 6hrs to local time(MDT)
launchMinute = 0
launchSecond = 0
launchDay = 24
launchMonth = 6 #this must be a number(ie June = 6)
launchYear = 2017
ascentRates = [3.0, 3.5, 4.0, 4.5, 5.0, 5.5]
burstAltitudes = [32000, 33000, 34000]
descentRates = [11, 13, 15, 17, 19]
for burstAltitude in burstAltitudes:
for ascent in ascentRates:
for descent in descentRates:
print(burstAltitude)
print(ascent)
print(descent)
print("")
payload = {'launchsite': launchSite, 'lat': latitude, 'lon': longitude, 'initial_alt': launchAltitude, 'hour': launchHour,
'min': launchMinute, 'second': launchSecond, 'day': launchDay, 'month': launchMonth, 'year': launchYear, 'ascent': ascent,
'burst': burstAltitude, 'drag': descent, 'submit': 'Run+Prediction'}
url = 'http://predict.habhub.org/ajax.php?action=submitForm'
r = requests.post(url, payload)
print(r.text)
uuid = r.json()['uuid']
csv_url = 'http://predict.habhub.org/preds/{}/flight_path.csv'.format(uuid)
r = requests.get(csv_url)
name = 'burst=' + str(burstAltitude) +' ascent=' + str(ascent) + ' descent=' + str(descent)
with open('predicted_%s.csv' % name, 'w') as f:
f.write(r.text)