2010-07-16 6 views
1

J'essayais le bit.ly api pour shorterning et l'ai mis au travail. Il retourne à mon script un document XML. Je voulais extraire l'étiquette, mais je n'arrive pas à l'analyser correctement.Analyse de la réponse XML de bit.ly

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

Donc la page contient le document xml. J'ai essayé:

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

cela provoque une erreur. Qu'est-ce que je fais mal?

+3

Quelle est l'erreur? – shookster

+0

IOError: [Errno 2] Aucun fichier ou répertoire de ce type parse() pense que la page est un fichier. Comment puis-je l'obtenir pour lire à partir de la varaibale the_page – Ali

Répondre

2

Vous ne fournissez pas de message d'erreur, donc je ne peux pas être sûr que c'est la seule erreur. Mais, xml.minidom.parse ne prend pas une chaîne. De l'docstring pour parse:

Parse a file into a DOM by filename or file object.

Vous devriez essayer:

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

depuis response se comportera comme un objet de fichier. Ou vous pouvez utiliser la méthode parseString dans minidom à la place (et ensuite passer the_page comme argument).

EDIT: pour extraire l'URL, vous devez faire:

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

Le résultat de getElementsByTagName est une liste de tous matching nœuds (un seul dans ce cas). url est un élément que vous avez remarqué, qui contient un nœud Texte enfant, qui contient les données dont vous avez besoin.

+0

Cela permet d'analyser the_page mais je n'arrive pas à obtenir des tags individuels. L'utilisation de doc.getElementsByTagName ("url") renvoie: [<élément DOM: URL à 0x13cbf80>] à la place des données intermédiaires. – Ali

+0

Mis à jour ma réponse, voir ci-dessus. – ars

1
from xml.dom.minidom import parseString 
doc = parseString(the_page) 

Voir la documentation de xml.dom.minidom.

+0

Cela permet d'analyser the_page mais je ne peux pas avoir l'impression d'avoir des tags individuels. L'utilisation de doc..getElementsByTagName ("url") renvoie: [<élément DOM: URL à 0x13cbf80>] à la place des données. – Ali

+0

Continuer la lecture de la documentation. Cet objet que vous récupérez a des attributs à partir desquels vous obtenez à la fois (a) obtenir ses enfants et (b) obtenir les données. –