2017-04-22 83 views
0

我正在嘗試做一些網絡報廢示例。我從一個網站下載數據,並將數據由XML和它的外觀像這樣如何從xml中提取所需的數據

ValCurs Date="20.04.2016" name="Official exchange rate"> 
<Valute ID="47"> 
<NumCode>978</NumCode> 
<CharCode>EUR</CharCode> 
<Nominal>1</Nominal> 
<Name>Euro</Name> 
<Value>22.4023</Value> 
</Valute> 
<Valute ID="44"> 
<NumCode>840</NumCode> 
<CharCode>USD</CharCode> 
<Nominal>1</Nominal> 
<Name>US Dollar</Name> 
<Value>19.7707</Value> 
</Valute> 
. 
. 
. 
. 
. 

有超過25種貨幣。

我想只提取貨幣名稱和代表匯率的值。我有50天的數據,我想計算這50天內每種貨幣的平均匯率。 我下載數據並保存在xml文件中。我的代碼如下。

import os 
import requests as rq 
from bs4 import BeautifulSoup 
from xml.etree import ElementTree as ET 


def saveData(path, date): 
    session = rq.session() 
    url = 'https://www.bnm.md/en/official_exchange_rates?get_xml=1&date=' + date 
    datastore = session.get(url) 
    with open(path, 'wb') as f: 
     f.write(datastore.content) 
    value = ET.fromstring('/home/robbin/Desktop/20.04.2016.xml').find('Name/value') 
    if value: 
     print 'Found value:', value.text 

def main(): 
    dates = ['20.04.2016', '21.04.2016', '22.04.2016'] 
    paths = [] 
    for date in dates: 
     path = '/home/robbin/Desktop/{}.xml'.format(date) 
     paths.append(path) 
    for path, date in zip(paths, dates): 
     saveData(path, date) 


if __name__ == '__main__': 
    main() 

我得到這個錯誤: 提高ERR

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 0 

我的問題是,我無法從XML數據中提取的名稱和值數據。我在SO和互聯網上看到了一些例子,但與我的案例截然不同。如果有人能幫助,那會很棒。

回答

0

fromstring(...)解析給定的字符串。所以它解析了路徑而不是xml內容。

應該是:

value = ET.fromstring(datastore.content).find('Name/value') 

工作例如:

def saveData(path, date): 
    session = rq.session() 
    url = 'https://www.bnm.md/en/official_exchange_rates?get_xml=1&date=' + date 
    datastore = session.get(url) 
    with open(path, 'wb') as f: 
     f.write(datastore.content) 
    data = ET.fromstring(datastore.content) 

    for element in data.iter(): 
     if element.tag in ('Name', 'Value'): 
      print("%s - %s" % (element.tag, element.text)) 
+0

我試過你的解決方案,但它沒有返回或在屏幕上打印任何東西,並且nabaz提到xml格式不正確。我從一個網站獲得這些數據,網址在代碼 – robbin

+0

中的網址中給出。嘗試發佈'savedData'函數... –

+0

非常感謝,它現在正在工作,我可以從xml標記中提取值。你拯救我的一天。祝你有美好的一天 – robbin

0

如果您在這裏正確處理了xml,問題是xml格式不正確。第一行1和第0列是問題所在。開始時應該有一個開始標籤「<」。

+0

我從一個網站,這個信息被賦予每一頁上面得到這個數據。 「這個XML文件似乎沒有任何關聯的樣式信息,文檔樹如下所示:」...........我不知道如何正確格式化。任何想法。該網站在代碼中的URL中給出。 – robbin