2017-04-24 33 views
1

我想学习一些示例。我可以从XML标记中提取数据,但是我正面临着提取字符串Date值的问题。 XML数据看起来像从python的xml数据提取字符串的日期

<?xml version="1.0" encoding="UTF-8"?> 
<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> 

我试图提取日期值是'20 .04.2016' 后来我想这添加到列表中。我使用标签来提取数据的代码是

#!/usr/bin/python 
import os 
import webbrowser 
import requests 
import sys 
from xml.etree import ElementTree as ET 
from collections import defaultdict 


url = 'https://www.bnm.md/en/official_exchange_rates?get_xml=1&date=20.04.2016' 
session = requests.session() 
response = session.get(url) 
data = ET.fromstring(response.content) 
elements = [] 
for element in data.iter(): 
    if element.tag in ('Name', 'Value'): 
     elements.append(element.text) 
    print elements 

有人能指导我如何提取日期字符串值,这是“二零一六年四月二十〇日”。谢谢

+2

在XML中,'X = “Y”'在标签被称为*属性*,利用它来进行使用Google。 –

+0

@AlexHall非常感谢提示。 – robbin

回答

2

你说:“但我面临问题提取日期值是字符串,它没有标签。” - 这不是真的!

Date值是<ValCurs>标记的属性。

因此,使用像BeautifulSoup这样的xml解析器,您可以访问ValCurs标签以获取Date值。

代码:

from bs4 import BeautifulSoup 
import requests 

url = 'https://www.bnm.md/en/official_exchange_rates?get_xml=1&date=20.04.2016' 

html_source = requests.get(url).text 

soup = BeautifulSoup(html_source, 'lxml') 

val_tag = soup.find_all('valcurs') 

for val in val_tag: 
    print(val['date']) 

输出:

'20.04.2016' 
+0

但BeautifulSoup(s,'lxml')中的s没有以我的xml数据格式定义 – robbin

+0

@robbin我更新了我的答案以从您提供的网站获取信息,而不是将您提供的xml内容分配给变量叫's'。看一看。 –

+0

非常感谢。我会试一试。 – robbin