Python 提要解析器 : How can I check for new RSS data?

标签 python database rss feedparser

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

import feedparser

rssPR = feedparser.parse('http://www.prnewswire.co.uk/rss/consumer-technology/wireless-      communications-news.rss')
rssDataList = []

for index, item in enumerate(rssPR.entries):
    rssDataList.append([item.published.encode('utf-8'), item.title.encode('utf-8')])

print rssDataList[0]  #for debugging purposes
print rssPR.modified #for testing purposes
  1. 我可以向我的代码添加什么,以便它仅在 RSS 已被修改时才检查新的 RSS 数据?

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

最佳答案

关于仅当提要发生变化时才下载,您可以使用 HTTP header's ETag作为后备也Last-Modified .

>>> feed.etag
'"6c132-941-ad7e3080"'
>>> feed.modified
'Fri, 11 Jun 2012 23:00:34 GMT'

您可以在调用 feedparser.parse 时指定它们。如果它们仍然相同(没有变化),请求将具有状态代码 304(未修改)。

归结为这个例子:

import feedparser
url = 'http://feedparser.org/docs/examples/atom10.xml'

# first request
feed = feedparser.parse(url)

# store the etag and modified
last_etag = feed.etag
last_modified = feed.modified

# check if new version exists
feed_update = feedparser.parse(url, etag=last_etag, modified=last_modified)

if feed_update.status == 304:
    # no changes

注意事项: 您需要检查 feed.etagfeed.modified 是否存在。

feedparser 库将自动发送带有提供的 etag 参数和 If-Modified- 的 If-None-Match header Since 为您提供了 modified 值。

来源:Feedparser documentation about http and etag





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

如果两个 header 都不起作用,则您不能使用它,并且必须始终从服务器下载 feed,即使它没有更改,因为在下载它之前您根本无法分辨。

这意味着您每次都必须下载提要,并存储您已经看到的条目。
如果你不想显示你以前看过的东西(例如只打印新的)你无论如何都必须保留一个看到的提要列表。一些提要为每个 条目 都有一个 id 字段,您可以在这种情况下使用它。否则,您必须有点创意才能弄清楚是什么让条目相同,特别是对于您的 Feed。

关于Python 提要解析器 : How can I check for new RSS data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22211795/

相关文章:

python - 你如何调用 gimp_file_load?

python - 如何使用 matplotlib 绘制盒须图

python - Windows 上的 virtualenv,激活/停用事件/ Hook

java - 未找到 WFMLRSVCApp.ear 文件

java - 如何点击 jsonobject/listview 提要项?

java - 当我尝试解析 xml 时收到无效字节

python - Azure Web 服务和 Django 日志

r - 如何将大型数据库表导入 R

mysql - 删除表中的数据但不删除数据库中的数据

ruby-on-rails - 将谷歌搜索作为 RSS 提要