我建议您使用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"}
然后,在 XPath 表达式中使用 s 前缀,如下所示:
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