python - 通过 xml.dom.minidom 处理 RSS/RDF

标签 python rss

我正在尝试通过 python 处理美味的 rss feed。这是一个示例:

...
  <item rdf:about="http://weblist.me/">
    <title>WebList - The Place To Find The Best List On The Web</title>
    <dc:date>2009-12-24T17:46:14Z</dc:date>
    <link>http://weblist.me/</link>
    ...
  </item>
  <item rdf:about="http://thumboo.com/">
    <title>Thumboo! Free Website Thumbnails and PHP Script to Generate Web Screenshots</title>
    <dc:date>2006-10-24T18:11:32Z</dc:date>
    <link>http://thumboo.com/</link>
...

相关代码为:

def getText(nodelist):
    rc = ""
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc = rc + node.data
    return rc

dom = xml.dom.minidom.parse(file)
items = dom.getElementsByTagName("item")
for i in items:
    title = i.getElementsByTagName("title")
    print getText(title)

我认为这会打印出每个标题,但我基本上得到的是空白输出。我确信我做了一些愚蠢的错误,但不知道是什么?

最佳答案

您正在将 title 节点传递给 getText,其 nodeType 不是 node.TEXT_NODE。您必须在 getText 方法中循环遍历该节点的所有子节点:

def getTextSingle(node):
    parts = [child.data for child in node.childNodes if child.nodeType == node.TEXT_NODE]
    return u"".join(parts)

def getText(nodelist):
    return u"".join(getTextSingle(node) for node in nodelist)

更好的是,在调用 getTextSingle 之前调用 node.normalize(),这样可以确保将 node.TEXT_NODE 类型的连续子节点合并到一个单个node.TEXT_NODE

关于python - 通过 xml.dom.minidom 处理 RSS/RDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2551214/

相关文章:

java - 如何在azure函数中使用rss文件

java - 使用 RSS 项目的 getValue 获取 <image> 标签中的字符串 - Android

python - 将文本文件转换为字典

javascript - 在没有 tierce 服务的 JS 中解析 RSS(vanilla JS 或 Angular)

facebook - 如何获取 facebook 页面 rss feed(每个人)

rss - 将其他人的 RSS 提要重新打包成新的演示文稿的合法性是什么?

python - 正则表达式并将两个列表作为元组返回

python - Django-registration:如何允许用户删除他们的帐户?

python - 无法在heroku上恢复postgres转储

python - 索引错误 : no such group python