2014-05-01 41 views
0

我想寫一些python代碼來自動查詢在線醫療計算工具。該的ressource,請訪問: http://www.shef.ac.uk/FRAX/tool.aspx?lang=en使用請求批量查詢在線計算器

我是新來的這種類型的事情,但是從我的研究,我應該能夠使用Python請求包這個理解。 從我我已經確定了表單元素

<form method="post" action="tool.aspx?lang=en" id="form1"> 

頁面源和元素的檢查,似乎直接對應的字段(如年齡)這個樣子

<input name="ctl00$ContentPlaceHolder1$toolage" type="text" id="ContentPlaceHolder1_toolage" maxlength="5" size="3" onkeypress="numericValidate(event)" style="width:40px;" /> 

我的測試代碼到目前爲止,看起來是這樣的(唯一的必填字段已經填寫的年齡,性別,體重和身高):

import requests 
url="http://www.shef.ac.uk/FRAX/tool.aspx?lang=en" 
payload ={'ctl00$ContentPlaceHolder1$toolage':'60', 
     'ctl00$ContentPlaceHolder1$year':'1954', 
     'ctl00$ContentPlaceHolder1$month':'01', 
     'ctl00$ContentPlaceHolder1$day':'01', 
     'ctl00$ContentPlaceHolder1$sex':'female', 
     'ctl00$ContentPlaceHolder1$weight':'70', 
     'ctl00$ContentPlaceHolder1$ht':'165', 

     'ctl00$ContentPlaceHolder1$facture':'no', 
     'ctl00$ContentPlaceHolder1facture_hip$':'no', 
     'ctl00$ContentPlaceHolder1$smoking':'no', 
     'ctl00$ContentPlaceHolder1$glu':'no', 
     'ctl00$ContentPlaceHolder1$rhe_art':'no', 

     'ctl00$ContentPlaceHolder1$sec_ost':'no', 
     'ctl00$ContentPlaceHolder1$alcohol':'no', 
     'ctl00$ContentPlaceHolder1$bmd_input':'', 
     'ctl00$ContentPlaceHolder1$btnCalculate':'Calculate', 
     } 

req = requests.post(url, params=payload) 
with open("requests_results.html", "w") as f: 
f.write(req.content) 

然而,這是行不通的。我沒有收到錯誤消息,但生成的保存的html頁面(我稍後會解析結果)僅包含沒有結果值的初始頁面。除了在我目前的有效載荷領域的形式也含有也許是必要的其他元素,如一些相同的數據類型,如年齡

<input name="ctl00$ContentPlaceHolder1$toolagehidden" type="hidden" id="ContentPlaceHolder1_toolagehidden" 

我已經試過有效載荷的不同組合的隱藏要素,但結果是一樣的。任何幫助將不勝感激

回答

0

您想要在POST之前對有效載荷進行編碼。像這樣:

import urllib 

usefulpayload = urllib.urlencode(payload) 

然後在請求中使用usefulpayload

+0

好吧我嘗試以urlencoded形式提交當前有效負載,但它沒有區別。編碼應該解決什麼問題? – user1657216