Я пробовал использовать bit.ly api для сокращения и заставить его работать. Он возвращает моему скрипту xml-документ. Я хотел извлечь тег, но не могу его правильно разобрать.

askfor = urllib2.Request(full_url)
response = urllib2.urlopen(askfor)
the_page = response.read()

Итак, the_page содержит xml-документ. Я попытался:

from xml.dom.minidom import parse
doc = parse(the_page)

Это вызывает ошибку. Что я делаю неправильно?

1
Ali 16 Июл 2010 в 05:42

2 ответа

Лучший ответ

Вы не предоставляете сообщение об ошибке, поэтому я не могу быть уверен, что это единственная ошибка. Но xml.minidom.parse не принимает строку. Из строки документации для parse:

Разберите файл в DOM по имени файла или файловому объекту.

Ты должен попытаться:

response = urllib2.urlopen(askfor)
doc = parse(response)

Поскольку response будет вести себя как файловый объект. Или вы можете использовать вместо этого метод parseString в minidom (а затем передать the_page в качестве аргумента).

РЕДАКТИРОВАТЬ: чтобы извлечь URL-адрес, вам необходимо сделать:

url_nodes = doc.getElementsByTagName('url')
url = url_nodes[0]
print url.childNodes[0].data

Результатом getElementsByTagName является список всех совпадающих узлов (в данном случае только один). url - это элемент, как вы заметили, который содержит дочерний узел Text, который содержит необходимые вам данные.

2
ars 16 Июл 2010 в 02:48
from xml.dom.minidom import parseString
doc = parseString(the_page)

См. Документацию по xml.dom.minidom.

1
Jed Smith 16 Июл 2010 в 02:03