Python 如何从xml中提取所需数据

Python 如何从xml中提取所需数据,python,xml,web-scraping,Python,Xml,Web Scraping,我试图做一些网页抓取的例子。我从一个网站下载数据,数据由xml组成,其外观如下 ValCurs Date="20.04.2016" name="Official exchange rate"> <Valute ID="47"> <NumCode>978</NumCode> <CharCode>EUR</CharCode> <Nominal>1</Nomi

我试图做一些网页抓取的例子。我从一个网站下载数据,数据由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>
.
.
.
.
.
我得到了这个错误: 提出错误

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

我的问题是我无法从这个xml数据中提取名称和值数据。我在SO和互联网上看到了一些例子,但它们与我的情况大不相同。如果有人能帮忙,那就太好了。

如果您在这里正确处理了xml,问题是xml的格式不正确。第一行1和第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))

我从一个网站上获得了这些数据,并且在每个页面上都给出了这些信息。“这个XML文件似乎没有任何与之相关的样式信息。文档树如下所示。“……我不知道如何正确格式化它。任何想法。该网站在代码中的url中给出。我尝试了您的解决方案,但它没有返回或在屏幕上打印任何内容,nabaz提到xml格式不正确。我从一个网站上获得了这些数据,网站在代码中的url中给出了这些数据。非常感谢,它现在正在工作,我可以从xml标记中提取值。你救了我一天。祝你今天愉快
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))