Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XML解析不适用于某些站点_Python_Xml Parsing - Fatal编程技术网

Python XML解析不适用于某些站点

Python XML解析不适用于某些站点,python,xml-parsing,Python,Xml Parsing,基于提供的教程,我有一个非常基本的XML解析器,用于阅读Python中的RSS提要 def GetRSS(RSSurl): url_info = urllib.urlopen(RSSurl) if (url_info): xmldoc = minidom.parse(url_info) if (xmldoc): for item_node in xmldoc.documentElement.childNodes: i

基于提供的教程,我有一个非常基本的XML解析器,用于阅读Python中的RSS提要

def GetRSS(RSSurl):
    url_info = urllib.urlopen(RSSurl)
    if (url_info):
        xmldoc = minidom.parse(url_info)
    if (xmldoc):
        for item_node in xmldoc.documentElement.childNodes:
            if (item_node.nodeName == "item"):  
                PrintNodeItems(item_node, ["title","link"])
    else:
        print "error"

def PrintNodeItems(XmlNode, items):
    for item_node in XmlNode.childNodes:
        if item_node.nodeName in items:
            PrintNodesText(item_node)

def PrintNodesText(XmlNode):
    text = ""
    for text_node in XmlNode.childNodes:
        if(text_node.nodeType == Node.TEXT_NODE):
            text = text_node.nodeValue
    if (len(text)>0):
        print text
        print ""
我已经在教程()中提供的地址上测试了GetRSS函数,它工作得很好,为我提供了正确的反馈。然而,我在学习如何编写此模块时,打算将其用于阅读RedLetterMedia()的RSS提要。当我尝试在该地址的Python Shell中使用GetRSS函数时,我得到一个空行作为反馈,而不是正确的结果。我还对它进行了测试,但也没有收到任何结果。我在所有地址上都使用了urllib.urlopen,它们的节点和子节点似乎都使用相同的格式(

我想,就像我之前的问题一样,我可能遗漏了一些非常明显的东西。有人知道那是什么吗

编辑:为了记录,我的错误消息根本没有出现,但可能是因为我错误地将其集成到代码中;我不会超越我的能力

更新: 使用stackoverflow上的多个已回答问题从头重写代码。工作起来很有魅力

def GetRSS(RSSurl):
    url_info = urllib.urlopen(RSSurl)
    if (url_info):
        xmldoc = minidom.parse(url_info)
    if (xmldoc):
        channel = xmldoc.getElementsByTagName('channel')
        for node in channel:
            item = xmldoc.getElementsByTagName('item')
            for node in item:
                alist = xmldoc.getElementsByTagName('link')
                for a in alist: 
                    linktext = a.firstChild.data
                    print linktext


def main():
    GetRSS('http://redlettermedia.com/feed/')
错误在这里:

for item_node in xmldoc.documentElement.childNodes:
    if (item_node.nodeName == "item"):
没有根
元素,只有一个
频道
。我是通过在循环中打印
nodeName
的所有值发现这一点的。

错误在这里:

for item_node in xmldoc.documentElement.childNodes:
    if (item_node.nodeName == "item"):

没有根
元素,只有一个
频道
。我是通过在循环中打印
nodeName
的所有值发现这一点的。

所以,我应该用“channel”替换该行中的“item”?我刚刚尝试过,现在它确实返回了一个结果:
>>GetRSS('http://redlettermedia.com/feed') http://redlettermedia.com
我想这是一个进步,根本没有回应,但这仍然不是我试图得到的回应。知道我为什么会得到这样的回应吗?我将同时检查所有节点和调用它们的尝试,可能这是另一种尝试调用不存在的东西的情况,例如根
元素。@Jordan:您需要在
中查找
。考虑使用“<代码> MIDIOM ”,它具有XPath支持。因此,我应该用“通道”替换“行”中的“item”吗?我刚刚尝试过,现在它确实返回了一个结果:
>>GetRSS('http://redlettermedia.com/feed') http://redlettermedia.com
我想这是一个进步,根本没有回应,但这仍然不是我试图得到的回应。知道我为什么会得到这样的回应吗?我将同时检查所有节点和调用它们的尝试,可能这是另一种尝试调用不存在的东西的情况,例如根
元素。@Jordan:您需要在
中查找
。考虑使用XPath支持而不是<代码> MIDIDOM >代码>。