Ser*_* R. 6 python xml bash parsing opml
我有一个名为Rss-Aware的软件,我正在尝试使用它.它基本上是桌面反馈检查器,用于检查RSS源是否更新,并通过Ubuntu的Notify-OSD系统发出通知.
但是,要知道要检查哪些Feed,您必须在〜/ .rss-aware/rssfeeds.txt中的文本文件中依次列出每个Feed网址之间的换行符列表中的Feed网址.就像是:
http://example.com/feed.xml
http://othersite.org/feed.xml
http://othergreatsite.net/rss.xml
Run Code Online (Sandbox Code Playgroud)
......看起来很简单吧?好吧,我想要使用的Feed列表是从Google Reader导出的OPML文件(它是一种XML),我不知道如何解析它只是输出feed urls.看起来它应该很直接但我很难过.
我很乐意,如果有人能用Python或Ruby提供实现,或者我可以从提示中快速完成.一个bash脚本会很棒.
非常感谢你的帮助,我是一个非常弱的程序员,并且很想学习如何进行这种基本的解析.
为此,我编写了一个订阅列表解析器。它被称为listparser,它是用 Python 编写的。我刚刚测试了您的 OPML 文件,它似乎完美地解析了该文件。它还将使您的供稿标签可用。
如果您曾经使用过 feedparser,那么界面应该很熟悉:
>>> import listparser as lp
>>> d = lp.parse('https://dl.dropbox.com/u/670189/google-reader-subscriptions.xml')
>>> len(d.feeds)
112
>>> d.feeds[100].url
u'http://longreads.com/rss'
>>> d.feeds[100].tags
[u'reading']
Run Code Online (Sandbox Code Playgroud)
可以使用类似于以下内容的脚本创建带有提要 URL 的文件:
import listparser as lp
d = lp.parse('https://dl.dropbox.com/u/670189/google-reader-subscriptions.xml')
f = open('/home/USERNAME/.rss-aware/rssfeeds.txt', 'w')
for i in d.feeds:
f.write(i.url + '\n')
f.close()
Run Code Online (Sandbox Code Playgroud)
只需替换USERNAME为您的实际用户名即可。完毕!
由于它是 XML 文件,因此您可以使用XPath查询来提取 url。在 XML 文件中,RSS feed url 似乎存储在xmlUrl属性中。XPath 表达式//@xmlUrl将选择该属性的所有值。
如果您想在网络浏览器中测试这一点,您可以使用在线 XPath 测试器。如果您想在 Python 中执行此 XPath 查询,此问题解释了如何在 Python 中使用 XPath。此外,lxml 文档中有一个关于在 lxml 中使用 XPath 的页面,可能会有所帮助。