首页 > 解决方案 > 在 Python 中使用自闭合标签解析 XML 数据

问题描述

我可以在打开和关闭标签时使用标签来解析 XML 数据。喜欢<link>https://www.nba.com/bucks/</link>

在代码中,这变成了,

link = item['link']

如何解析自闭标签?

<enclosure url="https://www.nba.com/bucks/sites/bucks/files/styles/media_thumbnail/public/middleton_3point_tw.jpg?itok=eiU05Btp" length="37714" type="image/jpeg" />

另外,我如何仅获取图像 url 并?在 URL 之后删除所有内容?

标签: xmlpython-3.x

解决方案


使用 XML 解析器,例如https://docs.python.org/2/library/xml.etree.elementtree.html

  • XPath 定义了用于识别和提取 xml 文档中的元素/标签的标准表达式

  • 将 XPaths 与良好的 xml 解析器一起使用,您可以轻松地找到文档中的任何元素。例如,在文档中查找所有附件元素的 xpath 将是“.//enclosure”

  • 如果您正在解析大量 XML XPath,那么值得一读。这是一个很棒的入门教程https://www.w3schools.com/xml/xpath_intro.asp

例如你可以这样做:

import xml.etree.ElementTree as ET
tree = ET.parse('your_xml_file.xml')
enclosures = tree.findall(".//enclosure") # Use the XPath to find all enclosure elements 
for enclosure in  enclosures:
    print(enclosure.attrib)

输出

{'url': 'https://www.nba.com/bucks/sites/bucks/files/styles/media_thumbnail/public/middleton_3point_tw.jpg?itok=eiU05Btp', 'length': '37714', 'type': 'image/jpeg'}

然后,您可以将 url 拆分为? 得到你的最终输出例如

url = enclosure.attrib['url'].split('?')[0]
print(url)

输出

https://www.nba.com/bucks/sites/bucks/files/styles/media_thumbnail/public/middleton_3point_tw.jpg


推荐阅读