解析XML文件以获取所需数据并将其存储在Python中的mongodb数据库中

时间:2013-09-03 15:13:30

标签: python xml mongodb xml-parsing pymongo

我有一个XML文件,如下所示:

XML File

我想从这个文件中获取所有事件的以下信息:

在类别活动下:

  • 起始日期
  • END_DATE
  • 标题

在类别场地下:

  • 地址
  • address_2 /
  • 城市
  • 纬度
  • 经度
  • 名称
  • POSTAL_CODE

然后将此信息存储在mongodb数据库中。我在解析方面没有太多经验。有人可以帮我这个!谢谢!

2 个答案:

答案 0 :(得分:5)

以下是使用lxml从网址解析xml并使用pymongo将数据插入mongodb的示例:

from urllib2 import urlopen
import pymongo
from lxml import etree


# parse xml file
root = etree.parse(urlopen('https://www.eventbrite.com/xml/event_search?app_key=USO53E2ZHT6LM4D5RA&country=DE&max=100&date=Future&page=1'))

events = []
for event in root.xpath('.//event'):
    event = {'start_date': event.find('start_date').text,
             'end_date': event.find('end_date').text,
             'title': event.find('title').text}
    events.append(event)


# insert the date into MongoDB
db = pymongo.MongoClient()
collection = db.test

collection.insert(events)

解析venue项目将留给您作为“家庭作业”。

请注意,还有其他xml解析器,例如:

希望有所帮助。

答案 1 :(得分:4)

from pymongo import MongoClient
import xml.etree.ElementTree as ET
from urllib2 import urlopen

cl = MongoClient()
coll = cl["dbname"]["collectionname"]

tree = ET.parse("https://www.eventbrite.com/xml/event_search?app_key=USO53E2ZHT6LM4D5RA&country=DE&max=100&date=Future&page=1")
root = tree.getroot()

for event in root.findall("./event"):
    doc = {}
    for c in event.getchildren():
        if c.tag in ("start_date", "end_date", "title"):
            doc[c.tag] = c.text
        elif c.tag == "venue":
            doc[c.tag] = {}
            for v in c.getchildren():
                if v.tag in ("address", "address_2", "city", "latitude", "longitude", "name", "postal_code"):
                    doc[c.tag][v.tag] = v.text

    coll.insert(doc)