【问题标题】:How to obtain field names of RSS feed(xml file) in python dynamically using feedparser?如何使用feedparser在python中动态获取RSS feed(xml文件)的字段名称?
【发布时间】:2015-12-24 10:44:08
【问题描述】:

我在 python 中使用 feedparser 库从特定的 URL 读取 rss 提要。 使用以下代码行在“费用”变量中接收提要:

fee =  feedparser.parse('http://www.indiatimes.com/r/python/.rss')

fee 包含列表格式列表中的提要。我们得到的格式和数据很复杂,而且不是固定的。

我想动态获取此 RSS 提要的字段(键)名称。怎么做?

某些字段名称是固定的,例如链接、日期等。但我需要代码中所有字段的名称。

【问题讨论】:

  • 谢谢。但我已经浏览了这个链接。问题在于获取这些键名,例如print d.entries[0]['link'] ,在这个 'entries' 和 'link' 并不存在于每个 feed(xml) 文件中。而且我需要动态地使用这些名称,但我事先并不知道我正在获取哪些字段名称。

标签: python python-2.7 rss


【解决方案1】:

首先,您所访问的链接存在 404 错误。 因此,您不会从该链接中获得任何 RSS。

其次,RSS 链接在大多数情况下都以.rss 文件结尾。

例如:http://timesofindia.feedsportal.com/c/33039/f/533916/index.rss

一旦你得到一个实际工作的 RSS 链接,你所要做的就是:

fee = feedparser.parse('http://timesofindia.feedsportal.com/c/33039/f/533916/index.rss')
for feed in fee.entries:
    print feed.title
    print feed.link

我上面写的是获取item元素。

让我给你一个更好的例子。

import feedparser
rss_document = """
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Sample Feed</title>
<description>For documentation &lt;em&gt;only&lt;/em&gt;</description>
<link>http://example.org/</link>
<pubDate>Sat, 07 Sep 2002 00:00:01 GMT</pubDate>
<!-- other elements omitted from this example -->
<item>
<title>First entry title</title>
<link>http://example.org/entry/3</link>
<description>Watch out for &lt;span style="background-image:
url(javascript:window.location='http://example.org/')"&gt;nasty
tricks&lt;/span&gt;</description>
<pubDate>Thu, 05 Sep 2002 00:00:01 GMT</pubDate>
<guid>http://example.org/entry/3</guid>
<!-- other elements omitted from this example -->
</item>
</channel>
</rss>
"""
rss = feedparser.parse(rss_document)

# Channel Details

print "-----Channel Details-----"

print rss.feed.title
print rss.feed.description
print rss.feed.link

# Item Details

print "-----Item Details-----"
for fee in rss.entries:
    print fee.title
    print fee.summary,
    print fee.link

【讨论】:

  • 您必须多描述一下这个问题。我不明白。可以的话举个例子:)
【解决方案2】:
feeds_all =  feedparser.parse('http://www.indiatimes.com/r/python/.rss')

我不确定它是哪种 json,但函数 .keys().values() 可以正常工作。我所做的是,为了动态获取以前未知的键名(上面的答案给出了静态键和它的值,你需要提前知道键名),fee.keys() 并且它起作用了!

因此,答案在以下几行中:channel_keys = feeds_all.keys()feed_keys = feeds_all.feed.keys(),用于获取这些键的值,feed_values = feeds_all.feed.values()....

【讨论】:

    【解决方案3】:

    使用下面的代码它会给你所有的键名,

    import feedparser
    feeds_all = feedparser.parse(URL)
    feed_all_keys = feeds_all.keys()
    feed_keys = feeds_all.feed.keys()
    entries_keys = feeds_all.entries.keys()
    
    1. feed_all_keys 保存所有键
    2. feed_keys 保存与 feed 相关的键
    3. entries_keys 保存与条目(项目)相关的键

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2021-01-27
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2014-04-19
      相关资源
      最近更新 更多