Python Feedparser:如何检查新的RSS数据?

我正在使用feedparser python库不断地从提要中提取RSS数据。我以这样一种方式编写了python代码,我可以请求RSS数据的单个实例。这是我目前的代码:

导入feedparser
rssPR=feedparser.parse(’http://www.prnewswire.co.uk/rss/consumer-technology/wireless- 通讯新闻(rss)
rssDataList=[]
对于索引,枚举中的项(rssPR.entries):
rssDataList.append([item.published.encode(’utf-8’),item.title.encode(’utf-8’)]))
打印rssDataList[0]#用于调试
打印rssPR.modified#用于测试

  1. 我可以在我的代码中添加什么,以便它仅在RSS被修改时检查新的RSS数据

  2. 假设我有一个包含10个RSS项目的列表,RSS提要已经更新为2个新的RSS项目。如何仅将这两项添加到我创建的rssDataList中?我不想继续向我的数据库添加相同的RSS

关于仅在订阅源更改时下载,您可以使用HTTP头的ETag,也可以作为上次修改的的回退

&gt&燃气轮机&燃气轮机;feed.etag
“6c132-941-ad7e3080”
&燃气轮机&燃气轮机&燃气轮机;饲料改良
“2012年6月11日星期五23:00:34 GMT”

您可以在对feedparser.parse的调用中指定它们。如果它们仍然相同(无更改),则请求将具有状态代码304(未修改)

可以归结为以下示例:

导入feedparser
url='1〕http://feedparser.org/docs/examples/atom10.xml'
#第一个请求
feed=feedparser.parse(url)
#存储etag和修改的
last_etag=feed.etag
上次修改=feed.modified
#检查是否存在新版本
feed\u update=feedparser.parse(url,etag=last\u etag,modified=last\u modified)
如果feed_update.status==304:
#不变

注:
您需要检查是否存在feed.etagfeed.modified

feedparser库将自动发送如果没有匹配的标题与提供的etag参数匹配,并且如果自以来进行了修改,将为您发送修改的

来源:关于http和etag的Feedparser文档



澄清评论中提出的问题:
这需要服务器支持这两个头中的任何一个

如果这两个头都不起作用,您就不能使用它,并且必须始终从服务器下载提要,即使它没有更改,因为您在下载之前无法判断

这意味着您必须每次下载提要,并存储您已经看到的条目。
如果你不想显示你以前看过的东西(例如,只打印新的),你必须保留一个看到的提要列表。有些提要对于每个条目都有一个id字段,您可以在这种情况下使用该字段。否则,你必须有点创造性,找出是什么让一个条目与你的提要相同

发表评论