You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup筛选RSS指定关键词标题文章无返回问题

问题根因
  • 匹配逻辑类型错误:soup.find_all('title')返回值是BeautifulSoup标签对象列表,不是标题文本字符串列表。原有判断'Guide' in ny_rss_title3是在检查列表内是否存在值完全等于'Guide'的元素,而非判断标题文本是否包含关键词,因此永远无法触发匹配逻辑。
  • 元素索引硬编码错误:RSS结构中第一个<title>、<link>属于根频道节点,每篇文章的对应字段嵌套在独立的<item>标签内。原有代码固定取ny_rss_title3[1]、ny_rss_url3[2]这类硬编码索引,会导致字段错位,拿到的内容和目标文章不对应。
  • 存在无效冗余代码:ny_rss_search = soup.find_all("Mark")无实际作用,目标RSS源中不存在名为Mark的标签。
修正代码

正确实现思路是先遍历所有<item>文章节点,在单个节点内部提取对应标题、链接、摘要字段,再做关键词匹配,从根源避免字段错位和类型错误:

import requests
from bs4 import BeautifulSoup
import webbrowser
import winsound

xml_text = requests.get('https://nypost.com/feed/').text
soup = BeautifulSoup(xml_text, 'xml')

# 遍历所有文章节点
for article in soup.find_all('item'):
    # 单篇文章内提取对应字段,不会错位
    article_title = article.find('title').text.strip()
    article_url = article.find('link').text.strip()
    article_summary = article.find('description').text.strip()

    # 关键词匹配
    if 'Guide' in article_title:
        webbrowser.open(article_url, new=2)
        print(f'NY Post Article Title: {article_title}\n')
        print(f"NY Post Article URL: {article_url}\n")
        print(f'NY Post Article Summary: {article_summary}\n')
        winsound.PlaySound("notify.wav", winsound.SND_ALIAS)
        # 若需要匹配所有符合条件的文章,删除下面的break即可
        break
可选优化
  • 若需要不区分大小写匹配关键词,可将判断逻辑修改为if 'guide' in article_title.lower():,可匹配Guide/GUIDE/guide等不同大小写形式。
  • 若需要同时匹配多个关键词,可将关键词存入列表,使用any(k in article_title for k in ['Guide', 'said'])作为判断条件。

内容的提问来源于stack exchange,提问作者pilotso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:33:15