如何遍历YouTube视频XML订阅源的entry节点获取yt:videoId值
嘿,处理YouTube的XML feed提取视频ID其实不难,我给你几个不同语言的实用实现方案,都是日常开发里常用的:
Python 实现方案
方法1:用标准库 xml.etree.ElementTree
不需要额外安装依赖,适合轻量场景:
import urllib.request import xml.etree.ElementTree as ET # 定义YouTube频道的feed URL feed_url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCBJycsmduvYEL83R_U4JriQ" # 获取XML内容 with urllib.request.urlopen(feed_url) as response: xml_content = response.read() # 解析XML tree = ET.fromstring(xml_content) # 定义命名空间(YouTube的yt前缀对应固定的命名空间URL) namespaces = {'yt': 'http://www.youtube.com/xml/schemas/2015'} # 遍历所有entry节点,提取yt:videoId的值 video_ids = [] for entry in tree.findall('entry'): video_id = entry.find('yt:videoId', namespaces).text video_ids.append(video_id) # 输出结果 print("提取到的视频ID列表:") for vid in video_ids: print(vid)
方法2:用feedparser库(更简洁)
feedparser会自动处理XML命名空间和解析细节,代码更简洁:
首先安装依赖:
pip install feedparser
然后编写代码:
import feedparser feed_url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCBJycsmduvYEL83R_U4JriQ" # 解析feed内容 feed = feedparser.parse(feed_url) # 提取所有视频ID(feedparser会把冒号转为下划线,所以用yt_videoid) video_ids = [entry['yt_videoid'] for entry in feed.entries] # 输出结果 print(video_ids)
Node.js 实现方案
如果用JavaScript/Node.js,可以用xml2js库来解析:
首先安装依赖:
npm install xml2js node-fetch
然后编写代码:
const fetch = require('node-fetch'); const xml2js = require('xml2js'); const feedUrl = "https://www.youtube.com/feeds/videos.xml?channel_id=UCBJycsmduvYEL83R_U4JriQ"; async function extractVideoIds() { // 获取XML内容 const response = await fetch(feedUrl); const xmlContent = await response.text(); // 解析XML const parser = new xml2js.Parser({ explicitArray: false }); const result = await parser.parseStringPromise(xmlContent); // 处理entry节点:兼容单视频和多视频的情况 const entries = result.feed.entry; const videoIds = Array.isArray(entries) ? entries.map(entry => entry['yt:videoId']) : [entries['yt:videoId']]; console.log("提取到的视频ID:", videoIds); } // 执行函数 extractVideoIds();
关键注意点
- 一定要正确处理XML命名空间:YouTube的XML里
yt前缀对应的命名空间是http://www.youtube.com/xml/schemas/2015,写错的话会找不到目标节点。 - 如果频道只有一个视频,部分解析库会返回单个对象而非数组,代码里要做兼容判断(比如Node.js示例中的处理逻辑)。
内容的提问来源于stack exchange,提问作者methuselah
相关产品推荐
相关产品推荐

