2010-03-25 47 views
1

我有200个RSS源的列表,我必须下载。这是一个持续的过程 - 我必须下载每篇文章,没有任何东西可以丢失,但也没有重复。那么最好的做法应该记住饲料的最新更新并控制它在x小时间隔内的变化?如果下载程序将重新启动,如何处理?所以下载者应该记住,下载了什么,不要再下载它...使用python下载RSS

它的某处实施了吗?或文章的任何提示?谢谢

回答

4

通常,这是你想要做什么:

  • 定期取饲料和使用universal feedparser解析他们并存储条目地方。
  • 获取提要时使用ETags和IfModified标头,以避免解析自上次提取后未更改的提要。您必须在上次抓取Feed时保留Etags和Ifmodified值。
  • 为了避免重复,每个条目应与其唯一的GUID一起存储,然后检查具有相同GUID的条目是否已存储。 (通过entry_link后退,通过title + feed url的哈希来唯一标识条目,以防Feed条目没有guid)
+0

努力解决问题。 – 2010-03-27 20:53:10

+0

我有每个饲料的类,它检查饲料,并记住最后如果修改(也选择新鲜的文章)。有关提要的信息也存储在数据库中。更新db中有关feed的行的方法可以在feed类中实现吗?因此,大约200个feed类实例必须记住连接到db并更新表中的主题行,或者可以在特殊类中实现它?我在面向对象的设计方面经验不足...... – 2010-03-27 21:22:14

+0

即时通讯对不起,我不太明白..为什么你需要维持200分贝连接?如果它的模式,然后一个简单的模型将有一个表的饲料,以及供稿条目表。在每个Feed表格行中,您可以存储Feed url,标题,etags,标题等信息。然后在Feed条目表中,您可以获得实际的信息,如文章标题,描述等等,以便将条目链接到Feed,您可以在入口表中有一个外键映射到它的Feed表格行。 – z33m 2010-03-28 07:36:50

2

您可以使用feedparser解析订阅源并将每个订阅源的最长发布时间存储在数据库中。

对于简单的数据库,您可以使用shelve

+3

sqlite3模块比数据库的shelve更好。 'sqlite3'实现了Python DB API,这意味着使用它的代码很容易移植到其他数据库,不存在'shelve'安全问题,其数据库可以被不同语言的程序使用。即使这些需求不是立即有利的,但它们的确向我建议,对于既不认识也不值得学习的人来说更值得学习。 – 2010-03-25 17:24:35