【问题标题】:Generating simple RSS feed from parsed data从解析的数据生成简单的 RSS 提要
【发布时间】:2013-06-11 01:04:53
【问题描述】:

你好 Stack Overflow 我有一些代码可以抓取网站并解析小部分数据,如下所示;

System MA
user id =  2084
username =  XYZ90
selection =  pnq
decimal =  6.000
Percentage =  19.1176470588 %

System NA
user id =  2086
username =  pron1
selection =  abc
decimal =  13.000
Percentage =  13.1147540984 %

System M
user id =  1664
username =  Chrisod
selection =  pleader
decimal =  15.000
Percentage =  16.091954023 %

以上是以下过滤器的结果:

if (deciaml > 5 and percentage > 10:
    print "system", system_acn
    print "user id = ",user_id
    print "username = ",username
    print "selection = ",selection
    print "decimal = ",decimal_delim   
    print "percentage = ,percentage_calc2,"%"

这都是从循环网络爬虫打印不同参数的结果。我想要做的是将每个导出为 RSS。因此,上述内容将作为三个 RSS 帖子存在于 RSS 提要中。我研究了一些模块,如 django,这似乎是一个工具包,用于许多东西,而不是专门的 RSS,本质上我正在寻找最简单和最简单的 RSS 解决方案?任何关于合适的方法和/或模块的建议或 cmet 将不胜感激。 亲切的问候 AEA

【问题讨论】:

    标签: python django loops python-2.7 rss


    【解决方案1】:

    我注意到您已将您的问题标记为与 Django 相关。如果你打算基于这个问题构建一个 Django 应用程序,那么syndication framework 就是你想要使用的。但是,除非您打算使用 Django 的其他组件,例如数据库内容和/或模板语言,否则这是不值得的。

    但是,您要求“最简单和最简单”的解决方案。我喜欢 Django,我只需要几分钟就可以设置一个应用程序,所以对我来说,完成整个项目的最简单方法可能是制作一个快速的 Django 应用程序。最简单的解决方案可能是手动创建提要,应该不难;类似:

    inp="""System MA
    user id =  2084
    username =  XYZ90
    selection =  pnq
    decimal =  6.000
    Percentage =  19.1176470588 %
    
    System NA
    user id =  2086
    username =  pron1
    selection =  abc
    decimal =  13.000
    Percentage =  13.1147540984 %
    
    System M
    user id =  1664
    username =  Chrisod
    selection =  pleader
    decimal =  15.000
    Percentage =  16.091954023 %"""
    
    inp=inp.split('\n\n')
    
    rss_start="""<?xml version="1.0" encoding="ISO-8859-1" ?>
    <rss version="2.0">
    
    <channel>
      <title>Your title</title>
      <link>http://yoursite.com</link>
      <description>Your discription</description>
    """
    
    rss_end="""</channel>
    
    </rss> """
    
    def description(item):
        return item
    
    def title(item):
        return item.split('\n')[0]
    
    def link(item):
        return 'http://mysite.com/' + item.split('\n')[0]
    
    rss_items=[]
    for counter, item in enumerate(inp):
        rss_items.append("""
      <item>
        <title>%s</title>
        <link>%s</link>
        <description>%s</description>
        <guid>counter</guid>
      </item>""" % (title(item),description(item),link(item)))
    
    rss_output=rss_start+''.join(rss_items)+rss_end
    

    您可能还想添加&lt;pubDate&gt; 标签。并确保您的 &lt;guid&gt;s 是独一无二的。

    注意:从 w3schools.com 复制的 rss 模板

    【讨论】:

    • 你好 foobarbecue 我对我的问题做了一些修改,主要是因为 cmets 不允许以美观的方式格式化代码。如何让过滤后的打印部分以与提供的inp= 前缀兼容的方式产生结果?亲切的问候 AEA
    • 您应该将过滤后的结果添加到某种变量中,例如列表或字典,而不是打印。我从一个名为“inp”的字符串变量开始,它只是“输入”的简写。然后,每次使用 .split('\n\n') 连续有两个换行符时,我将字符串拆分为字符串列表。您可以将 inp 构建为列表,在 if 语句中使用 inp=[] 然后 inp.append() 。如果您愿意,我可以编辑我的答案以添加此代码,但您要求的是非常基本的 python。
    • 我必须先将我的代码作为变量输出,然后才能正确测试此代码,如果可行,我当然会记得投票并接受您的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2013-10-27
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多