Разбор XML-ответа bit.ly

1

Я пытался попробовать bit.ly api для shorterning и заставить его работать. Он возвращает мой script XML-документ. Я хотел извлечь тег, но can not, кажется, разбирает его должным образом.

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)

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

  • 3
    В чем ошибка?
  • 0
    IOError: [Errno 2] Нет такого файла или каталога parse () считает, что the_page является файлом. Как я могу получить это читать с varaibale the_page
Теги:
parsing
bit.ly

2 ответа

2
Лучший ответ

Вы не предоставляете сообщение об ошибке, поэтому я не могу быть уверенным, что это единственная ошибка. Но xml.minidom.parse не принимает строку. Из docstring для 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 - это элемент, который вы заметили, который содержит дочерний текст node, который содержит нужные вам данные.

  • 0
    Это разбирает the_page, но я не могу получить отдельные теги. использование doc.getElementsByTagName ("url") возвращает: [<DOM Element: url at 0x13cbf80>] вместо промежуточных данных.
  • 0
    Обновил мой ответ, см. Выше.
1
from xml.dom.minidom import parseString
doc = parseString(the_page)

Смотрите документацию для xml.dom.minidom.

  • 0
    Это разбирает the_page, но я не могу получить отдельные теги. использование doc..getElementsByTagName ("url") возвращает: [<DOM Element: url at 0x13cbf80>] вместо данных.
  • 0
    Продолжайте читать документацию. Этот объект, который вы получаете, имеет атрибуты, из которых вы получаете (а) его дочерние элементы и (б) данные.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню