gpt4 book ai didi

python - 使用 python 和 ElementTree 解析 XML

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:06 27 4
gpt4 key购买 nike

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

关于python - 使用 python 和 ElementTree 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40388102/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com