【问题标题】:Checking RSS feeds for new content with feedparser使用 feedparser 检查 RSS 提要中的新内容
【发布时间】:2011-12-19 20:22:21
【问题描述】:

我正在使用 python 构建一个应用程序,其功能类似于 RSS 聚合器。我正在使用 feedparser 库来执行此操作。但是,我正在努力让程序正确检测是否有新内容。

我主要关注与新闻相关的提要。除了查看是否已将新项目添加到提要中之外,我还希望能够检测以前的文章是否已更新。有谁知道我如何使用 feedparser 来做到这一点,记住唯一的强制性项目元素是标题或描述?我愿意假设链接元素也将始终存在。

Feedparser 与每个项目关联的“id”属性似乎只是指向文章的链接,因此这可能有助于检测提要上的新文章,但不能检测对以前文章的更新,因为这些文章的“id”不会变了。

我在 stackoverflow 上查看了以前的线程,有些人建议对内容进行哈希处理或对标题 + url 进行哈希处理,但我不确定这意味着什么或如何去做(如果确实是正确的方法)。

【问题讨论】:

    标签: python rss feedparser


    【解决方案1】:

    在这种情况下,散列意味着计算一个较短的值来表示 url 和 title 的每个组合。当您使用哈希函数确保冲突(两个不同的项目生成相同的值)的几率很低时,这种方法很有效。

    传统上,MD5 是一个很好的功能(但注意不要将它用于加密操作 - 为此目的已弃用它)。

    例如。

    >>> import hashlib
    >>> url = "http://www.example.com/article/001"
    >>> title = "The Article's Title"
    >>> id = hashlib.md5(url + title).hexdigest()
    >>> print id
    785cbba05a2929a9f76a06d834140439
    >>> 
    

    这将提供一个 ID,如果 URL 或标题发生变化,该 ID 也会发生变化 - 表明它是一篇新文章。

    如果您还想检测对文章内容的编辑,可以下载文章内容并将其添加到哈希中。

    请注意,如果您确实打算拉下整个页面,则可能需要了解 HTTP conditional GET with Python 以节省带宽并对您正在访问的网站更加友好。

    【讨论】:

    • 优秀。谢谢你。我现在遇到的问题是,每次阅读相同的内容时,我都会不断获得不同的哈希值。我得到这样的内容:content = urllib.urlopen(items[0]["link"]).read() 然后我计算哈希值。如果我使用上面的方法第二次读取相同的内容,这次我会得到一个不同的哈希值,这不应该发生,因为内容应该是相同的。关于如何防止这种情况的任何线索?
    • 可能有多种原因导致整个网页可能因一次加载而异。例如,边栏中可能包含一个定期更新的新文章列表。它归结为“内容”的定义。您需要深入了解页面的 HTML,找到帖子本身的正文并将其用作您的内容。
    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多