【问题标题】:Less painful way to parse a RSS-Feed with lxml?用 lxml 解析 RSS-Feed 的痛苦方法?
【发布时间】:2012-06-22 14:11:19
【问题描述】:

我需要使用 Python、Atom 来显示 RSS 提要。来自 PHP,我可以通过 $entry->link 快速获取值,我发现 lxml 更精确、更快,尽管很复杂。经过数小时的探索,我得到了这个与 arstechnica-feed 的合作:

def GetRSSFeed(url):
    out = []
    feed = urllib.urlopen(url)
    feed = etree.parse(feed)
    feed = feed.getroot()
    for element in feed.iterfind(".//item"):
        meta = element.getchildren()
        title = meta[0].text
        link = meta[1].text
        for subel in element.iterfind(".//description"):
            desc = subel.text
            entry = [title,link,desc]
            out.append(entry)
    return out

这可以更简单吗?如何直接访问标签? Feedparser 只需一行代码即可完成工作!为什么?

【问题讨论】:

  • 那你为什么要使用 lxml 而不是 feedparser?

标签: python django lxml atom-feed feedparser


【解决方案1】:

查看 feedparser 库。它为您提供了一个格式良好的 RSS 对象。

> import feedparser
> feed = feedparser.parse('http://feeds.marketwatch.com/marketwatch/marketpulse/')
> print feed.keys()
['feed',
 'status',
 'updated',
 'updated_parsed',
 'encoding',
 'bozo',
 'headers',
 'etag',
 'href',
 'version',
 'entries',
 'namespaces']

>  len(feed.entries)
    30

【讨论】:

  • 感谢您的回答。我在操作中提到了 feedparser。我针对 lxml 对其进行了测试,结果更快。我现在想做的就是按标签名称选择孩子。像 rss.item.description.text。不可能?
  • 这样更符合你想要的吗? (查找属于项目子项的所有描述) feed.findall('.//item//description')
  • 不是对所问内容的回答。你能用 lxml 做到这一点吗
【解决方案2】:

您可以尝试speedparser,这是Universal Feed Parserlxml 的实现。不过仍处于测试阶段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多