【问题标题】:Detect duplicate titles using feedparser使用 feedparser 检测重复的标题
【发布时间】:2020-03-13 08:51:51
【问题描述】:
def parseRSS(rss_url):
    parsed_feed = feedparser.parse(rss_url)
    return parsed_feed

def getHeadlines(rss_url,key):
    headlines = []
    feed = parseRSS(rss_url)
    for newsitem in feed['items']:
        if newsitem['title'] not in headlines:
            headlines.append([newsitem,key])
        else:
            print("-----------------------Duplicate title found----------------------")
    return headlines

def get_rss():
    allheadlines = []
    newsurls = {
    ('key1','source1'): 'https://news.google.com/news/rss/?hl=en&ned=us&gl=US',
    ('key2','source2'): 'https://news.google.com/news/rss/?hl=en&ned=us&gl=US',
    }
    for key,url in newsurls.items():
        allheadlines.extend(getHeadlines(url,key))

    return allheadlines

allheadlines = get_rss()

for hl in allheadlines:
    source = hl[1][0]
    key = hl[1][1]
    title = hl[0]['title']
    link = hl[0]['link']

我使用相同的 RSS 提要进行测试。每次添加新标题时,我都会检查标题是否已经在标题中。但是,它似乎没有检测到重复的标题。永远不会打印找到的重复标题。我究竟做错了什么?

【问题讨论】:

  • 您可以先尝试打印feed,首先可能没有任何重复的标题。
  • 我在本例中使用了两次相同的 rss 提要,以确保标题重复。
  • 好的,但你永远不会将allheadlines 传递进去,所以headlines = [] 总是会让比较变得毫无意义
  • 因为你每次运行循环时都会创建null list
  • 尝试在您的getHeadlines 函数中传递allheadlines,如果它不起作用则返回

标签: python feedparser


【解决方案1】:

试试这个

def parseRSS(rss_url):
    parsed_feed = feedparser.parse(rss_url)
    return parsed_feed

def getHeadlines(rss_url,key,allheadlines,allitems):
    feed = parseRSS(rss_url)
    for newsitem in feed['items']:
        if newsitem['title'] not in allheadlines:
            allheadlines.append(newsitem['title'])
            allitems.append([newsitem,key])
        else:
            print("-----------------------Duplicate title found----------------------")
    return allheadlines,allitems

def get_rss():
    allheadlines = []
    allitems = []
    newsurls = {
    ('key1','source1'): 'https://news.google.com/news/rss/?hl=en&ned=us&gl=US',
    ('key2','source2'): 'https://news.google.com/news/rss/?hl=en&ned=us&gl=US',
    }
    for key,url in newsurls.items():
        allheadlines,allitems=(getHeadlines(url,key,allheadlines,allitems))

    return allitems

allheadlines = get_rss()

【讨论】:

  • 似乎仍然没有检测到重复的标题
  • 这行得通,但是它改变了我原始代码的工作方式。我需要将所有内容扩展到所有标题,而不仅仅是标题。我需要访问标题、链接、updated_pa​​rsed、密钥和来源。在这个新功能中,只有标题附加到所有标题。
猜你喜欢
  • 2021-10-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
相关资源
最近更新 更多