2

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

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

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

我查看了 stackoverflow 上的先前线程,有些人建议散列内容或散列标题 + url,但我不确定这意味着什么或如何去做(如果确实是正确的方法)。

4

1 回答 1

4

在这种情况下,散列意味着计算一个较短的值来表示 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以节省带宽并对您正在访问的网站更加友好。

于 2011-12-19T20:56:13.187 回答