1

我对 python 脚本语言非常陌生,最近正在研究一个解析基于 Web 的 xml 文件的解析器。

我可以在 python 中使用 minidom 检索除一个元素之外的所有元素,没有任何问题,但是我有一个节点,但我遇到了问题。我从 XML 文件中需要的最后一个节点是“图像”标签中的“url”,这可以在以下 xml 文件示例中找到:

<events>
    <event id="abcde01">
        <title> Name of event </title>
        <url> The URL of the Event <- the url tag I do not need </url>
        <image> 
            <url> THE URL I DO NEED </url>
        </image>
    </event>

下面我复制了我认为可能相关的代码的简短部分。我非常感谢任何帮助以检索最后一个图像 url 节点。我还将包括我尝试过的内容以及在 GAE 中运行此代码时收到的错误。我使用的 python 版本是 Python 2.7,我可能还应该指出我将它们保存在一个数组中(以便以后输入到数据库)。

class XMLParser(webapp2.RequestHandler):
def get(self):
        base_url = 'http://api.eventful.com/rest/events/search?location=Dublin&date=Today'
        #downloads data from xml file:
        response = urllib.urlopen(base_url)
        #converts data to string
        data = response.read()
        unicode_data = data.decode('utf-8')
        data = unicode_data.encode('ascii','ignore')
        #closes file
        response.close()
        #parses xml downloaded
        dom = mdom.parseString(data)        
        node = dom.documentElement  #needed for declaration of variable
        #print out all event names (titles) found in the eventful xml
        event_main = dom.getElementsByTagName('event')

        #URLs list parsing - MY ATTEMPT - 
        urls_list = []
        for im in event_main:
            image_url = image.getElementsByTagName("image")[0].childNodes[0]
            urls_list.append(image_url)

我收到的错误如下,非常感谢任何帮助,凯伦

image_url = im.getElementsByTagName("image")[0].childNodes[0]
IndexError: list index out of range
4

1 回答 1

0

首先,不要重新编码内容。没有必要这样做,XML 解析器完全有能力处理编码的内容。

接下来,我将使用ElementTree API来完成这样的任务:

from xml.etree import ElementTree as ET

response = urllib.urlopen(base_url)
tree = ET.parse(response)

urls_list = []
for event in tree.findall('.//event[image]'):
    # find the text content of the first <image><url> tag combination:
    image_url = event.find('.//image/url')
    if image_url is not None:
        urls_list.append(image_url.text)

这仅考虑event具有直接image子元素的元素。

于 2013-04-20T08:16:00.653 回答