【问题标题】:Extract String Date from xml data via python通过python从xml数据中提取字符串日期
【发布时间】:2017-04-25 03:18:49
【问题描述】:

我正在尝试学习一些示例。我可以从 xml 标签中提取数据,但我面临提取字符串的日期值的问题。 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

有人可以指导我如何提取日期字符串值“20.04.2016”。谢谢

【问题讨论】:

  • 在 XML 中,标签中的 x="y" 称为 属性,用于谷歌搜索。
  • @AlexHall 非常感谢您的提示。

标签: python xml web-scraping


【解决方案1】:

你说:“但是我在提取日期值时遇到问题,它是字符串并且它没有标签。” - 这不是真的!

Date 值是&lt;ValCurs&gt; 标记的属性。

因此,使用像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'

【讨论】:

  • 但是 BeautifulSoup(s, 'lxml') 中的 s 在我的 xml 数据格式中没有定义
  • @robbin 我已更新我的答案以从您提供的网站获取信息,而不是将您提供的 xml 内容分配给名为 s 的变量。看看吧。
  • 非常感谢。我会试一试的。
  • 能不能按照我的代码修改一下。我使用的代码与您的代码有些不同,而且我对编码不熟悉,这就是为什么我无法在我的代码中修改您的代码。我会很感激的。
  • 我听不懂你说什么...我的代码提供了你试图抓取的 Date 值。你还需要什么?
猜你喜欢
  • 1970-01-01
  • 2021-03-26
  • 2011-02-17
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多