0

0

怎么用Python解析iTunes播客的XML Feed

煙雲

煙雲

发布时间:2026-02-02 11:57:32

|

507人浏览过

|

来源于php中文网

原创

Python解析iTunes播客XML Feed需用xml.etree.ElementTree或feedparser:前者需手动声明命名空间映射(如{"itunes": "https://www.php.cn/link/5647ed707e5b7b343c59502684365085"})提取title、enclosure.url、itunes:duration等字段;后者自动归一化为entry.itunes_duration等属性,更省心。

怎么用python解析itunes播客的xml feed

用Python解析iTunes播客的XML Feed,核心是读取标准RSS(含iTunes扩展)格式的XML文档,并提取标题、描述、音频链接、发布日期、封面图等字段。关键在于正确处理命名空间,尤其是 itunes: 前缀的元素。

1. 理解播客Feed的XML结构

iTunes播客Feed本质是符合RSS 2.0规范的XML文件,额外引入了iTunes DTD定义的命名空间:https://www.php.cn/link/5647ed707e5b7b343c59502684365085//EN。常见带前缀的字段包括:

  • — 播客作者
  • — 简短摘要
  • — 副标题
  • — 封面图URL
  • — 单集时长(如 "42:18")
  • — 音频附件(实际下载地址)

2. 使用xml.etree.ElementTree解析(推荐)

Python标准库 xml.etree.ElementTree 轻量且足够处理大多数播客Feed。需显式声明命名空间映射,否则无法定位 itunes: 元素。

示例代码:

立即学习Python免费学习笔记(深入)”;

Boomy
Boomy

AI音乐生成工具,创建生成音乐,与世界分享.

下载
import xml.etree.ElementTree as ET
import requests

获取Feed内容(可本地文件或远程URL)

url = "https://www.php.cn/link/4b0e9d0b2ec615f32fc627d50cd04c5f" response = requests.get(url) response.raise_for_status() root = ET.fromstring(response.content)

定义命名空间映射(key为前缀,value为URI)

ns = { "rss": "https://www.php.cn/link/429be53185d62d6d41561471fdd129a1", "itunes": "https://www.php.cn/link/5647ed707e5b7b343c59502684365085" }

提取频道信息(channel节点下)

channel = root.find("rss:channel", ns) if channel is not None: title = channel.find("rss:title", ns).text if channel.find("rss:title", ns) is not None else "" description = channel.find("rss:description", ns).text or "" itunes_author = channel.find("itunes:author", ns).text if channel.find("itunes:author", ns) is not None else ""

# 封面图(注意:是  标签的 href 属性)
itunes_image = channel.find("itunes:image", ns)
image_url = itunes_image.get("href") if itunes_image is not None else ""

提取所有 episode(item 节点)

episodes = [] for item in channel.findall("rss:item", ns): ep = {} ep["title"] = item.find("rss:title", ns).text or "" ep["pubDate"] = item.find("rss:pubDate", ns).text or ""

# 音频地址来自 enclosure 标签的 url 属性
enclosure = item.find("rss:enclosure", ns)
ep["audio_url"] = enclosure.get("url") if enclosure is not None else ""

# iTunes扩展字段
ep["duration"] = item.find("itunes:duration", ns).text if item.find("itunes:duration", ns) is not None else ""
ep["summary"] = item.find("itunes:summary", ns).text or ""

episodes.append(ep)

print(f"共解析 {len(episodes)} 集播客")

3. 处理常见问题

  • 命名空间不匹配:不同Feed可能使用略有差异的RSS命名空间(如无前缀、atom:混用),建议先用 ET.tostring(root, encoding='unicode') 打印开头几行,确认实际使用的命名空间URI
  • 编码错误:部分Feed返回非UTF-8编码(如ISO-8859-1),可用 response.content.decode('latin-1') 再传给 ET.fromstring()
  • 缺少必要字段:如 缺失时,有些Feed改用 (需额外注册 media 命名空间)
  • 日期格式解析:RSS的 是RFC 2822格式,可用 email.utils.parsedate_to_datetime() 转为datetime对象

4. 替代方案:feedparser(更省心)

如果不想手动处理XML和命名空间,feedparser 库专为RSS/Atom设计,自动解析iTunes扩展字段并归一化为字典键(如 entry.itunes_duration, entry.itunes_image)。

安装与使用:

pip install feedparser

import feedparser d = feedparser.parse("https://www.php.cn/link/4b0e9d0b2ec615f32fc627d50cd04c5f")

print(d.feed.title) # 频道标题 print(d.feed.itunes_author) # 频道作者(自动映射)

for entry in d.entries: print(entry.title) print(entry.enclosures[0].href) # 音频地址 print(entry.itunes_duration)

注意:feedparser会把所有命名空间字段扁平化为 entry.xxx 形式,但字段名可能因Feed而异(如 itunes_summarysummary_detail.value),建议打印 dir(entry) 查看可用属性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

187

2023.09.27

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1905

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2094

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1089

2024.11.28

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1905

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2094

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1089

2024.11.28

Golang channel原理
Golang channel原理

本专题整合了Golang channel通信相关介绍,阅读专题下面的文章了解更多详细内容。

249

2025.11.14

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

6

2026.02.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号