使用feedparser检查RSS源的新内容
我正在用Python开发一个应用程序,功能类似于RSS聚合器。我使用了feedparser这个库来实现这个功能。不过,我在让程序正确检测新内容方面遇到了一些困难。
我主要关注的是新闻相关的源。除了查看源中是否添加了新项目外,我还想检测之前的文章是否有更新。有没有人知道我该如何使用feedparser来做到这一点?需要注意的是,唯一必须的项目元素是标题或描述。我也假设链接元素总是会存在。
Feedparser中与每个项目相关的“id”属性似乎只是指向文章的链接,这可能有助于检测源中的新文章,但对于检测之前文章的更新就没什么帮助了,因为那些文章的“id”是不会改变的。
我在StackOverflow上查过以前的讨论,有些人建议对内容进行哈希处理,或者对标题和链接进行哈希处理,但我不太明白这是什么意思,或者该怎么做(如果这确实是正确的方法的话)。
1 个回答
4
在这个上下文中,哈希(Hashing)指的是计算一个较短的值,用来表示每个网址和标题的组合。这个方法有效的前提是你使用的哈希函数能够确保碰撞的几率很低(也就是两个不同的东西生成相同的值的可能性很小)。
传统上,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,如果网址或标题发生变化,这个ID也会跟着变化,这就表示这是一个新文章。
如果你还想检测文章内容的修改,可以把文章的内容也加入到哈希中。
注意,如果你打算下载整个页面,建议你了解一下HTTP条件GET与Python
,这样可以节省带宽,对你访问的网站也更友好。