【问题标题】:BeautifulSoup XML Python extracting attributes from specific tagsBeautifulSoup XML Python 从特定标签中提取属性
【发布时间】:2013-07-01 20:12:51
【问题描述】:

此 XML 文档包含一组标签 events-data。我想从最近的events-data 中提取信息。例如,在下面的代码中,我想去 last events-data 标记,去event-date 标记并提取date 子标记的文本。目前我在 Python 中使用 BeautifulSoup 来遍历这个文档。有什么想法吗?

    <?xml version="1.0" encoding="UTF-8"?>
        <first-tag>
          <second-tag>
            <events-data>
               <event-date>
                    <date>20040913</date>
               </event-date>
            </events-data>

          <events-data> #the one i want to traverse to grab date text
             <event-date>
               <date>20040913</date>
             </event-date>
          </events-data> 
         </second-tag>
       </first-tag>

【问题讨论】:

  • 我在想,就像在elementtreeminidom 中,您可以根据索引和长度遍历标签,但我想不出一种语法(或为此找到一个)为 BeautifulSoup 工作。请记住,我对 beautifulsoup 还是很陌生。
  • 它必须以某种方式计算events-data 出现的次数,可能是numEvents = len(soup.find('events-data')),然后读取该索引处的子标签?

标签: python xml beautifulsoup


【解决方案1】:

这是使用 BeautifulSoup 3

import os
import sys

# Import Custom libraries
from BeautifulSoup import BeautifulStoneSoup

xml_str = \
'''
<?xml version="1.0" encoding="UTF-8"?>
    <first-tag>
      <second-tag>
        <events-data>
           <event-date>
                <date>20040913</date>
           </event-date>
        </events-data>

      <events-data>
         <event-date>
           <date>20040913</date>
         </event-date>
      </events-data> 
     </second-tag>
   </first-tag>
'''
soup = BeautifulStoneSoup(xml_str)

event_data_location = lambda x: x.name == "events-data"

events = soup.findAll(event_data_location)
if(events):
    # The last event-data
    print events[-1].text

【讨论】:

  • 这工作完美无缺,谢谢!但是再有一个请求,说event-date 中有更多标签,如何获取这些标签?我觉得它类似于print events[-1].text(..another tag..)
  • 哦,没关系,我只会对每个子标签使用它。 +1 出色的快速工作,感谢 bud!
猜你喜欢
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2013-04-06
相关资源
最近更新 更多