gpt4 book ai didi

Python - 使用 lxml 返回 title.text 属性的值

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:33 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 lxml 从 url 解析 xml 以返回 title 属性的值。有谁知道我有什么问题或什么会返回标题值/文本?因此,在下面的示例中,我想返回“Weeds - S05E05 - Van Nuys - HD TV”的值

来自 URL 的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<subsonic-response xmlns="http://subsonic.org/restapi" status="ok" version="1.8.0">
<song id="11345" parent="11287" title="Weeds - S05E05 - Van Nuys - HD TV" album="Season 5" artist="Weeds" isDir="false" created="2009-07-06T22:21:16" duration="1638" bitRate="384" size="782304110" suffix="mkv" contentType="video/x-matroska" isVideo="true" path="Weeds/Season 5/Weeds - S05E05 - Van Nuys - HD TV.mkv" transcodedSuffix="flv" transcodedContentType="video/x-flv"/>
</subsonic-response>

我当前的 Python 代码:

import lxml
from lxml import html
from urllib2 import urlopen

url = 'https://myurl.com'

tree = html.parse(urlopen(url))
songs = tree.findall('{*}song')
for song in songs:
print song.attrib['title']

使用上面的代码我没有得到任何数据返回,有什么想法吗?

打印出树=

<lxml.etree._ElementTree object at 0x0000000003348F48>

打印出歌曲 =

[]

最佳答案

首先,您实际上并没有在代码中使用lxml。您导入 lxml HTML 解析器,但忽略它并仅使用标准库 xml.etree.ElementTree module相反。

其次,您搜索 data/song 但您的文档中没有任何 data 元素,因此不会找到任何匹配项。最后但同样重要的是,您有一个使用 namespace 的文档。在搜索元素或使用 {*} 通配符搜索时,您必须将它们包括在内。

以下为您找到歌曲:

from lxml import etree

tree = etree.parse(URL) # lxml can load URLs for you
songs = tree.findall('{*}song')
for song in songs:
print song.attrib['title']

要使用显式命名空间,您必须将 {*} 通配符替换为完整的命名空间 URL;默认命名空间在 tree 对象的 .nsmap 命名空间字典中可用:

namespace = tree.nsmap[None]
songs = tree.findall('{%s}song' % namespace)

关于Python - 使用 lxml 返回 title.text 属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13608745/

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