我正在做类(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
