试着四处寻找一个简单的解释,说明我在哪里遇到这个问题但却找不到一个。以下代码摘录:
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,所以我必须错过一些简单的东西。有人可以解释为什么这会被卡在这上面吗?非常感谢您的帮助。
答案 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