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

Eri*_*ler 12 python database rss

我正在使用feedparser python库连续从feed中提取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
Run Code Online (Sandbox Code Playgroud)
  1. 我可以将哪些内容添加到我的代码中,以便当且仅当RSS已被修改时才会检查新的RSS数据?

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

luc*_*ald 18

关于只有当/更改了Feed时才能进行下载,您可以使用HTTP标头的etagETag.

>>> feed.etag
'"6c132-941-ad7e3080"'
>>> feed.modified
'Fri, 11 Jun 2012 23:00:34 GMT'
Run Code Online (Sandbox Code Playgroud)

您可以在通话中指定它们Last-Modified.如果它们仍然相同(无更改),则请求将具有状态代码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
Run Code Online (Sandbox Code Playgroud)

注意:您需要检查是否feedparser.parsefeed.etag存在.

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