2017-08-02 24 views
1

我想提交一個多部分/表單數據,用於設置TRILEGAL上的模擬輸入,並從重定向的頁面下載可用的文件。檢索請求的表單結果

我研究的請求文件,urllib的,抓鬥,機械化等,似乎在機械化我的代碼是:

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

但是,我無法測試它,因爲它不在可用蟒蛇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,然後單擊「提交」,您會看到一個新窗口(在method =「post」action =後面)。 /trilegal_1.6「)。

我怎樣才能到達帶有請求的新窗口(例如,當點擊提交按鈕時,打開頁面),然後點擊結果頁面上的鏈接來檢索結果文件(「結果將會是在THIS LINK約2分鐘後可用。「)?

如果你能指點我其他任何可以完成這項工作的工具,我會非常感激 - 我花了數小時仔細研究可以幫助解決這個問題的東西。

謝謝!

克里斯

+0

您需要打開該鏈接才能從文件中獲取數據 – ksai

+0

嗨!但是有什麼聯繫?如果我打開http://stev.oapd.inaf.it/cgi-bin/trilegal_1.6它會打開輸入,而不是結果頁面...... – scichris

+0

對,在該頁面中,您必須在2分鐘後打開此LINK – ksai

回答

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。您可以使用相應的程序打開它。

+0

所以實際上,當我得到一個關於瀏覽器的錯誤['eq_delta'] = [「-19.0833」]:TypeError:必須分配一個字符串。感謝您的建議,以解決使用機械化,我有下面的另一個工作答案 – scichris

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

非常感謝! Chris