我想提交一个multipart / form-data,为TRILEGAL上的模拟设置输入,并下载重定向页面中的文件。
我研究了请求,urllib,Grab,机械化等的文档,似乎在机械化中我的代码将是:
from mechanize import Browser
browser = Browser()
browser.open("http://stev.oapd.inaf.it/cgi-bin/trilegal")
browser.select_form(nr=0)
browser['gal_coord'] = ["2"]
browser['eq_alpha'] = ["277.981111"]
browser['eq_delta'] = ["-19.0833"]
response = browser.submit()
content = response.read()
但是,我无法测试它,因为它在python 3中不可用。
所以我尝试了请求:
import requests
url = 'http://stev.oapd.inaf.it/cgi-bin/trilegal'
values = {'gal_coord':"2",
'eq_alpha':"277.981111",
'eq_delta':"-19.0833",
'field':" 0.047117",
}
r = requests.post(url, files = values)
但我无法弄清楚如何进入结果页面 - 如果我这样做
r.content
它会显示我刚刚提交的表单的内容,而如果您打开实际的website,然后点击“提交”,则会看到一个新窗口(按照方法=“post”action =“ ./trilegal_1.6“)。
如何通过请求进入新窗口(即按照单击提交按钮时打开的页面),然后单击结果页面上的链接以检索结果文件(“结果将可用”在这个链接约2分钟后。“)?
如果你可以指出任何其他可以完成这项工作的工具我真的很感激 - 我花了好几个小时来寻找可以帮助解决这个问题的东西。
谢谢!
克里斯
答案 0 :(得分:2)
以下是python 2.7
from mechanize import Browser
from urllib import urlretrieve # for download purpose
from bs4 import BeautifulSoup
browser = Browser()
browser.open("http://stev.oapd.inaf.it/cgi-bin/trilegal")
browser.select_form(nr=0)
browser['gal_coord'] = ["2"]
browser['eq_alpha'] = ["277.981111"]
browser['eq_delta'] = ["-19.0833"]
response = browser.submit()
content = response.read()
soup = BeautifulSoup(content, 'html.parser')
base_url = 'http://stev.oapd.inaf.it'
# fetch the url from page source and it to base url
link = soup.findAll('a')[0]['href'].split('..')[1]
url = base_url + str(link)
filename = 'test.dat'
# now download the file
urlretrieve(url, filename)
您的文件将以test.dat
下载。您可以使用相应的程序打开它。
答案 1 :(得分:1)
我发布一个单独的答案,因为它太杂乱了。感谢@ksai,这适用于python 2.7:
import re
import time
from mechanize import Browser
browser = Browser()
browser.open("http://stev.oapd.inaf.it/cgi-bin/trilegal")
browser.select_form(nr=0)
#set appropriate form contents
browser['gal_coord'] = ["2"]
browser['eq_alpha'] = "277.981111"
browser['eq_delta'] = "-19.0833"
browser['field'] = " 0.047117"
browser['photsys_file'] = ["tab_mag_odfnew/tab_mag_lsst.dat"]
browser["icm_lim"] = "3"
browser["mag_lim"] = "24.5"
response = browser.submit()
# wait 1 min while results are prepared
time.sleep(60)
# select the appropriate url
url = 'http://stev.oapd.inaf.it/' + str(browser.links()[0].url[3:])
# download the results file
browser.retrieve(url, 'test1.dat')
非常感谢! 克里斯