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)
我可以将哪些内容添加到我的代码中,以便当且仅当RSS已被修改时才会检查新的RSS数据?
假设我有一个包含10个RSS项目的列表,RSS源已经更新了2个新的RSS项目.我怎样才能将这两个项添加到我创建的rssDataList中?我不想继续向我的数据库添加相同的RSS.
luc*_*ald 18
关于只有当/更改了Feed时才能进行下载,您可以使用HTTP标头的etag和ETag
.
>>> 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.parse
和feed.etag
存在.