检索包含请求的表单结果

2024-09-30 00:32:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提交一个为TRILEGAL上的模拟设置输入的多部分/表单数据,并从重定向页面下载可用的文件。在

我研究了请求文档、urllib、Grab、mechanize等,似乎在mechanize中我的代码应该是:

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()

但是,我无法测试它,因为它在python3中不可用。在

所以我试着要求:

^{pr2}$

但我想不出如何进入结果页面-如果我这样做的话

r.content

它显示我刚刚提交的表单的内容,而如果您打开实际的website,然后单击“提交”,您将看到一个新窗口(在method=“post”action=“/trilegal_1.6”之后)。在

我如何通过请求进入新窗口(即,在单击“提交”按钮时打开的页面),然后单击结果页面上的链接以检索结果文件(“此链接大约2分钟后将显示结果”)?在

如果你能为我指出任何其他的工具,我将非常感激-我花了几个小时寻找,以便有助于解决这个问题。在

谢谢你!在

克里斯


Tags: 文件数据文档browser表单链接response页面
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下载。你可以用各自的程序打开它。在

我贴了一个单独的答案,因为它太混乱了。感谢@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')

非常感谢! 克里斯

相关问题 更多 >

    热门问题