为什么这个Python脚本只将最后一篇RSS帖子读入文件?

时间:2009-07-22 23:40:01

标签: python xml rss

我正在尝试修复一个Python脚本,该脚本从特定的RSS源中获取帖子并将其删除并将其输入到文本文件中。正如您在下面看到的,有两个主要的打印功能。一旦运行,只打印到shell,但它显示所有的帖子,这是我想要它做的。现在,第二部分是问题所在。它只会将RSS提要的 last 帖子打印成文本,而不是像第一个函数那样打印出来。我也尝试使用%s而不是新的打印行pr来制作第二个函数(f = open())。变量

如果有人能告诉我为什么脚本不会将RSS提要的多个(最后一篇)帖子发布到文本中,但是shell中的全部内容,以及我需要修改它的哪些修改,我会非常感激它:)

以下是代码:

import urllib
import sys
import xml.dom.minidom

#The url of the feed
address = 'http://www.vg.no/export/Alle/rdf.hbs?kat=nyheter'

#Our actual xml document
document = xml.dom.minidom.parse(urllib.urlopen(address))
for item in document.getElementsByTagName('item'):
    title = item.getElementsByTagName('title')[0].firstChild.data
    link = item.getElementsByTagName('link')[0].firstChild.data
    description = item.getElementsByTagName('description')[0].firstChild.data

    str = link.strip("http://go.vg.no/cgi-bin/go.cgi/rssart/")
    print "\n"
    print "------------------------------------------------------------------"
    print '''"%s"\n\n%s\n\n(%s)''' % (title.encode('UTF8', 'replace'),
                                            description.encode('UTF8','replace'),
                                            str.encode('UTF8','replace'))
    print "------------------------------------------------------------------"
    print "\n"

f = open('lawl.txt','w')
print >>f, "----------------------Nyeste paa VG-------------------------------"
print >>f, title.encode('UTF8','replace')
print >>f, description.encode('UTF8','replace')
print >>f, str.encode('UTF8','replace')
print >>f, "------------------------------------------------------------------"
print >>f, "\n"

2 个答案:

答案 0 :(得分:2)

您的print >>f位于for循环之后,因此它们会运行一次,并对上次保存到titledescription和{{的数据进行操作1}}。

您应该在str循环之前打开文件,然后将for行放在循环中。

print >>f

答案 1 :(得分:1)

您遍历所有帖子,将其属性分配给变量并打印到终端。

然后将变量(恰好包含最后一次赋值的结果)打印到文件中。所以你在这里得到一个帖子。

如果你想要不止一个,也需要迭代。