2017-09-15 279 views
0

我正在開發一個虛擬助理項目。我希望它能告訴我其他貨幣的美元匯率。 我已經寫了下面的代碼使用beautifulsoup從給定的網站獲取數據,解析它並打印結果在命令行供我閱讀。但這只是美元兌PKR。如何修改該程序,以便使用任何貨幣並告訴我該幣種的兌換率? 例如,如果我問「什麼是英國的美元匯率?」,「什麼是阿聯酋的英鎊匯率?」,「什麼是美國的歐元匯率?」它會返回轉換率。我所指的代碼如下。如何在python中轉換貨幣?

import urllib.request 
from bs4 import BeautifulSoup 

currency_page = 'http://www.xe.com/currencyconverter/convert/?Amount=1&From=USD&To=PKR' 
currency = urllib.request.urlopen(currency_page) 
currency_data = BeautifulSoup(currency, 'html.parser') 

USD = currency_data.find('span', attrs={'class': 'uccResultUnit'}) 
USD_PKR = USD.text.strip() # strip() is used to remove starting and trailing 
print(USD_PKR) 

我試圖編輯URL http://www.xe.com/currencyconverter/convert/?Amount=1&From=USD&To=PKRAmount= custom_amount, From= any_source_curreny, To=any_target_currency更換Amount=1, From=USD, To=PKR

並通過多種貨幣名稱爲變量,但我confusedd與此有關。任何人都可以建議如何做到這一點?任何幫助表示讚賞。由於

+3

你爲什麼不使用的API,而不是刮的網頁? – Barmar

+1

外匯 - https://pypi.python.org/pypi/forex-python –

+0

結果將被髮送到TTS引擎,它會爲我說話。這就是我爲什麼報廢它。 API提供這樣的東西嗎? –

回答

1

一個簡單的解決方案,這是動態的根據用戶的輸入(可以使用str.format()做到這一點)來構建你的URL。例如:

#!/usr/bin/env python 

from requests import get 
from bs4 import BeautifulSoup 
import sys 

v1 = sys.argv[1] 
v2 = sys.argv[2] 
amount = sys.argv[3] 

# check if the values passed are valid 
# and construct the url like so: 
currency_page = 'http://www......../convert/?Amount={}&From={}&To={}'.format(amount,v1,v2) 

currency = get(currency_page).text 
currency_data = BeautifulSoup(currency, 'html.parser') 

USD = currency_data.find('span', attrs={'class': 'uccResultUnit'}) 
USD_PKR = USD.text.strip() 
print(USD_PKR) 

結果:

$ ./test.py EUR PKR 1       
1 EUR = 125.790 PKR 

另一種解決方案,如在評論也提到的那樣,是使用

  1. API或
  2. 一個模塊代替。
+0

它返回錯誤: urllib.error.HTTPError:HTTP錯誤400:錯誤的請求 –

+0

@Tauseef_Ahmed你用原始的替換了我的文章中的'/ convert' url-part之前嗎?出於典型原因,我沒有發佈實際的網址!此外,我嘗試了代碼,併爲我工作得很好(我使用'request'而不是'urllib') – coder

+0

是的,我做到了。你可以在這裏分享更正的代碼嗎? –