ElementTree XML Parsing只返回sitemap.org?

时间:2014-02-24 19:39:04

标签: python xml-parsing elementtree

试着四处寻找一个简单的解释,说明我在哪里遇到这个问题但却找不到一个。以下代码摘录:

import time, threading, urllib2, os
import xml.etree.ElementTree as ET

save_path = '/Users/sampeka/Desktop/Programming/SilkySpider/Data'
bloomberg_site_map = urllib2.urlopen('http://www.bloomberg.com/sitemap_news.xml').read()
reuters_site_map = urllib2.urlopen('http://www.reuters.com/sitemap_news_index.xml').read()

def saveXmlFile(data,name):
    try:
        abs_path = os.path.abspath(save_path)
        open_file = open(abs_path+'/'+name,'w')
        open_file.write(data)
    finally:
        open_file.close()

class ParseXML:

    def __init__(self,xml_file):
        self.xml_file = xml_file

    def printStuff(self):
        tree = ET.parse(self.xml_file)
        root = tree.getroot()
        for child in root:
            print child.tag, child.attrib


saveXmlFile(bloomberg_site_map,'Bloomberg Site Map.xml')
ParseXML(save_path+'/Bloomberg Site Map.xml').printStuff()

多次返回:

{http://www.sitemaps.org/schemas/sitemap/0.9}url
{http://www.sitemaps.org/schemas/sitemap/0.9}url
{http://www.sitemaps.org/schemas/sitemap/0.9}url
{http://www.sitemaps.org/schemas/sitemap/0.9}url
{http://www.sitemaps.org/schemas/sitemap/0.9}url

正确保存XML,所以我必须错过一些简单的东西。有人可以解释为什么这会被卡在这上面吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的代码正在迭代XML根元素的子元素。由于您的XML文档(查看了bloomberg文档)包含:

<urlset ...>
  <url ...>
    ...
  </url>
  <url ...>
    ...
  </url>
  ...
</urlset>

输出是url元素的列表。

您尚未说明您希望得到什么输出。但是,您很可能需要递归地遍历每个XML元素,或者使用xpath来提取文档的特定部分。

示例:提取publication_date字段:

import lxml.etree
tree = lxml.etree.parse(self.xml_file)
root = tree.getroot()
for pd in root.xpath("//*[local-name()='publication_date' and namespace-uri()='http://www.google.com/schemas/sitemap-news/0.9']"):
    print pd.text