【问题标题】:Python 3 - HTML Parser - Make dictionary from the dataPython 3 - HTML Parser - 从数据中制作字典
【发布时间】:2015-04-03 05:50:53
【问题描述】:

如何从这些标签中获取数据字典:

<Currency_name>U.S. dollar</Currency_name>
<Observation_ISO4217>USD</Observation_ISO4217>
<Observation_date>2015-03-09</Observation_date>
<Observation_data>1.2598</Observation_data>
<Observation_data_reciprocal>0.7938</Observation_data_reciprocal>

例如我想要一个像{U.D. dollar: [USD, 2015-03-09, 1.2598,0.7938]} 这样的字典

我正在使用

def handle_starttag(self, tag, attrs):
    self.dic = {}
    if tag == 'currency_name':
        self.dic[currency_name] = handle_data()`

def handle_data: 
    return data

【问题讨论】:

  • 所以不考虑tagname?只有数据?
  • 一般来说,我在从 handle_data 获取数据时遇到了麻烦。你一般如何处理handle_data?它只是一次给我每行的所有数据,而在调用它时无法控制。就像我想为某个标签名称调用它,我该怎么做?
  • 那你为什么需要html parser来解析xml呢?
  • 这是在课堂上学习的内容

标签: python html-parsing


【解决方案1】:

那么你可以使用XML PARSER这里一个例子

a='''<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
    <rank>1</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
    <rank>4</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
    <rank>68</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
</country>
</data>'''

 import xml.etree.ElementTree as ET
 root=ET.fromstring(a)
 #to parse from file use ET.parse('country_data.xml')

 b={}
 for child in root:
    b.update({child[0].text:[child[i].text for i in range(1,len(child)-2)]})
    b[child[0].text].extend(value for neighbor in child.iter('neighbor') for k,value in neighbor.items())

输出

b= {'4': ['2011', 'N', '马来西亚'], '68': ['2011', '13600', 'W', '哥斯达黎加', 'E', '哥伦比亚'], '1': ['2008', '141100', 'E', '奥地利', 'W', '瑞士']}

【讨论】:

  • 那不是我想做的。
  • 您之前应该在问题中提到您不想使用 XML Parser。我们不是任何代码编写服务
  • 是的,在我给出完整答案之前 OP 用“那不是我想做的事”的评论阻止我,有人给我投了反对票,所以我觉得最好还是离开。我会更新我用一个例子回答
  • 记住这一点:唯一内容是链接的答案(就像这个一样)是从来没有一个好的答案。您应始终在答案正文中提供完整答案,并提供任何其他链接。但是没有超链接的答案正文应该已经是一个有效的答案。这就是你收到反对票的原因。学习,下次避免。
猜你喜欢
  • 2017-01-13
  • 2016-06-09
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 2021-06-29
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多