Я очень новичок в языке сценариев python и недавно работал над парсером, который анализирует веб-файл xml.Не удается получить доступ к дочернему узлу при анализе XML с языком Python
Я могу извлечь все, кроме одного из элементов, используя minidom в python без проблем, однако у меня есть один узел, с которым у меня возникают проблемы. Последний узел, который я требую из файла 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
Не расшифровывать и повторно кодировать данные! Оставьте декодирование парсером XML. По какой причине вы не можете использовать [ElementTree API] (http://docs.python.org/2/library/xml.etree.elementtree.html) вместо мини-диска? –
Этот URL-адрес возвращает ответ об ошибке для меня; Я получаю сообщение «Ошибка аутентификации». Возможно, вы тоже? –
Привет @MartijnPieters, я оставил ключ api для этого примера, так же, как я думал, что это будет проще. Я могу вставить ключ api, если вы чувствуете, что это будет более полезно, но у меня нет проблем с этим, тем более доступ к элементам тега изображения. Мне пришлось декодировать и перекодировать данные xml после того, как он был проанализирован из-за проблемы с кодировкой с черной звездой, найденной в XML-данных. http://stackoverflow.com/questions/16026594/unicode-encoding-errors-python-parsing-xml-cant-encode-a-character-star/16073981?noredirect=1#16073981 – Karen