解析CNN RSS源时仅获取前7条条目后触发无published属性的AttributeError
问题根因
该异常并非feedparser的解析逻辑故障,本质是CNN提供的RSS源字段一致性缺失:源XML中前7条结构化供稿条目自带published发布时间字段,feedparser会将该字段映射到对应条目对象的属性上;从第8条开始的聚合类、转载类条目,源端未写入任何发布时间相关字段,feedparser不会为不存在的源字段自动挂载对应对象属性,直接硬访问news.published就会触发AttributeError。
解决方法
- 对条目属性做兼容式访问,禁止硬依赖固定字段
feedparser返回的条目对象是类字典结构,支持.get()方法读取属性并设置默认兜底值,改写后的代码可兼容所有异常场景,不会抛出访问错误:import feedparser url = "http://rss.cnn.com/rss/edition.rss" feed = feedparser.parse(url) for news_idx, news_item in enumerate(feed.entries, start=1): # 依次匹配不同命名规则的时间字段,无有效内容时输出兜底提示 publish_time = ( news_item.get("published") or news_item.get("updated") or news_item.get("pubDate") or "该条目未标注发布时间" ) print(f"第{news_idx}条:{publish_time}") - 升级feedparser到最新稳定版本
部分旧版本feedparser存在RSS2.0规范的字段映射缺陷,会导致部分源端存在的字段无法被正常识别,执行升级命令即可解决对应识别问题:pip install --upgrade feedparser
额外注意事项
CNN当前输出的RSS源没有统一的供稿字段校验规则,不同板块的供稿系统输出的XML结构差异较大,遍历所有RSS条目时,所有属性访问都需要做空值兜底逻辑,不可假设所有条目都包含完全一致的字段集合。
内容的提问来源于stack exchange,提问作者Hoangtho1997
相关产品推荐
相关产品推荐

