RSS是目前很多网站、博客用来分发内容的标准格式,Python的feedparser库是解析RSS和Atom格式内容的高效工具,不需要开发者手动处理复杂的XML解析逻辑,就能快速获取订阅源中的标题、链接、发布时间等信息。

feedparser库的安装
feedparser是第三方库,需要先通过pip安装,执行以下命令即可完成安装:
# 安装feedparser库 pip install feedparser
基础解析流程
使用feedparser解析RSS的核心步骤很简单,首先导入库,然后调用parse()方法传入RSS源的URL或者本地文件路径,就能得到解析后的对象。
解析在线RSS源
以下是一个解析在线RSS订阅源的示例,这里使用公开的博客RSS源作为演示:
import feedparser
# 解析在线RSS源
rss_url = "https://ipipp.com/sample_rss.xml"
feed = feedparser.parse(rss_url)
# 打印订阅源基本信息
print("订阅源标题:", feed.feed.get("title", "无标题"))
print("订阅源链接:", feed.feed.get("link", "无链接"))
print("订阅源描述:", feed.feed.get("description", "无描述"))
# 遍历所有文章条目
print("n文章列表:")
for entry in feed.entries:
print(f"标题:{entry.get('title', '无标题')}")
print(f"链接:{entry.get('link', '无链接')}")
print(f"发布时间:{entry.get('published', '无时间')}")
print("-" * 30)
解析本地RSS文件
如果有本地的RSS文件,也可以直接传入文件路径进行解析:
import feedparser
# 解析本地RSS文件
local_rss_path = "./local_feed.xml"
feed = feedparser.parse(local_rss_path)
# 获取文章数量
print(f"本地RSS文件包含{len(feed.entries)}篇文章")
常用属性说明
解析后的feed对象主要包含两个核心部分,feed属性对应订阅源的整体信息,entries属性是一个列表,对应订阅源中的所有文章条目,具体属性如下表:
| 属性分类 | 属性名 | 说明 |
|---|---|---|
| feed(订阅源信息) | title | 订阅源的标题 |
| link | 订阅源对应的网站链接 | |
| description | 订阅源的描述信息 | |
| language | 订阅源使用的语言 | |
| entries(文章条目) | title | 文章标题 |
| link | 文章详情链接 | |
| published | 文章发布时间字符串 | |
| summary | 文章摘要内容 | |
| content | 文章完整内容,部分RSS源会提供 |
实用解析技巧
处理编码问题
部分RSS源可能存在编码不规范的问题,导致解析后出现乱码,可以在解析时手动指定编码:
import feedparser
# 手动指定编码解析RSS
rss_url = "https://ipipp.com/encoding_sample.xml"
feed = feedparser.parse(rss_url, encoding="utf-8")
# 验证编码是否正常
if feed.entries:
print("编码正常,第一篇文章标题:", feed.entries[0].title)
提取多媒体内容
很多RSS源会包含图片、音频等多媒体内容,这些内容通常存在media_content或者enclosures属性中:
import feedparser
rss_url = "https://ipipp.com/media_rss.xml"
feed = feedparser.parse(rss_url)
for entry in feed.entries:
# 提取图片链接
if "media_content" in entry:
for media in entry.media_content:
if media.get("type", "").startswith("image"):
print(f"文章《{entry.title}》的图片链接:{media['url']}")
# 提取附件(如音频、视频)
if "enclosures" in entry:
for enclosure in entry.enclosures:
print(f"文章《{entry.title}》的附件链接:{enclosure['href']},类型:{enclosure['type']}")
批量解析多个RSS源
如果需要同时处理多个RSS订阅源,可以用循环批量解析,还可以加入异常处理避免单个源出错影响整体流程:
import feedparser
# 多个RSS源列表
rss_urls = [
"https://ipipp.com/rss1.xml",
"https://ipipp.com/rss2.xml",
"https://ipipp.com/rss3.xml"
]
all_articles = []
for url in rss_urls:
try:
feed = feedparser.parse(url)
# 提取每个源的前5篇文章
for entry in feed.entries[:5]:
all_articles.append({
"source": feed.feed.get("title", url),
"title": entry.get("title", "无标题"),
"link": entry.get("link", ""),
"published": entry.get("published", "")
})
except Exception as e:
print(f"解析{url}失败,错误原因:{e}")
print(f"总共获取到{len(all_articles)}篇文章")
处理时间格式
feedparser已经自动将RSS中的时间字符串转换为time.struct_time格式,存储在published_parsed属性中,方便后续做时间处理:
import feedparser
import time
rss_url = "https://ipipp.com/sample_rss.xml"
feed = feedparser.parse(rss_url)
for entry in feed.entries:
# 获取解析后的时间对象
time_struct = entry.get("published_parsed")
if time_struct:
# 转换为自定义格式的时间字符串
format_time = time.strftime("%Y-%m-%d %H:%M:%S", time_struct)
print(f"文章《{entry.title}》发布时间:{format_time}")
注意事项
- 解析RSS时如果网络不稳定,可以添加超时设置,避免程序长时间阻塞。
- 部分RSS源可能有访问频率限制,批量解析时不要请求过于频繁,可加入适当的延迟。
- 如果RSS源需要认证才能访问,可以在
parse()方法中传入request_headers参数添加请求头。
feedparser库的兼容性很好,支持RSS 0.9x、RSS 1.0、RSS 2.0以及Atom 0.3、Atom 1.0等多种格式,不需要针对不同的RSS格式写不同的解析逻辑,大大降低了开发复杂度。
feedparserRSS解析Python爬虫XML解析修改时间:2026-06-21 17:42:47