Skip to main content
 首页 » 编程设计

python之使用 python 和 ElementTree 解析 XML

2025年05月04日2398°冷暖

我正在做类(class)项目,我必须将链接列表保存到文本文件。

我提供了 XML 并尝试遍历所有 url ,但遇到了麻烦。

我尝试过使用元素树,但无法遍历我阅读了许多其他问题并尝试过但没有成功。请帮忙

结构是这样的

<urlset xmlns="http://www.crawlingcourse.com/sitemap/1.3"> 
  <url> 
     <loc> 
        http://www.crawlingcourse.com/item-3911512 
     </loc> 
  </url> 
<url>.... 

请您参考如下方法:

我建议你使用lxml高效解析 XML 文件。

from lxml import etree 

您的 XML 示例格式不正确,我这样修复了它:

content = """\ 
<urlset xmlns="http://www.crawlingcourse.com/sitemap/1.3"> 
  <url> 
     <loc> 
        http://www.crawlingcourse.com/item-3911512 
     </loc> 
  </url> 
</urlset>""" 

要解析一个文件,你可以使用etree.parse() .但是因为这个样本是一个字符串,所以我使用 etree.XML() :

tree = etree.XML(content) 

在 XML 树中搜索元素的自然方法是使用 XPath。例如,您可以这样做:

loc_list = tree.xpath("//url/loc") 

但是你什么也得不到:

for loc in loc_list: 
    print(loc.text) 
# None 

原因,可能是你的问题,是<urlset>使用默认命名空间:“http://www.crawlingcourse.com/sitemap/1.3 ”。

要让它工作,你需要使用 xpath()使用此命名空间运行。让我们给这个命名空间起一个名字:“s”:

NS = {'s': "http://www.crawlingcourse.com/sitemap/1.3"} 

然后,使用 s像这样在 XPath 表达式中添加前缀:

loc_list = tree.xpath("//s:url/s:loc", namespaces=NS) 
 
for loc in loc_list: 
    print(loc.text) 
#     http://www.crawlingcourse.com/item-3911512 

因为您的 XML 是缩进的,所以您需要去除空格:

for loc in loc_list: 
    url = loc.text.strip() 
    print(url) 
# http://www.crawlingcourse.com/item-3911512