2010-07-16 155 views
1

我正在尝试缩短bit.ly api并使其工作。它返回到我的脚本一个XML文档。我想提取出标签,但似乎不能正确解析它。解析bit.ly的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) 

这会导致错误。我究竟做错了什么?

+3

什么是错误? – shookster 2010-07-16 01:44:55

+0

IOError:[Errno 2]没有这样的文件或目录 parse()认为the_page是一个文件。我怎样才能从varaibale读取the_page – Ali 2010-07-16 02:01:58

回答

2

您不提供错误消息,因此我无法确定这是唯一的错误。但是,xml.minidom.parse不带字符串。从文档字符串为parse

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

你应该尝试:

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节点。

+0

那解析the_page,但我似乎无法得到一个单独的标签。使用doc.getElementsByTagName(“url”)返回:[]而不是中间的数据。 – Ali 2010-07-16 02:28:59

+0

更新了我的答案,参见上文。 – ars 2010-07-16 02:49:08

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

请参阅xml.dom.minidom的文档。

+0

解析the_page,但我似乎无法得到一个单独的标签。 使用doc..getElementsByTagName(“url”) 返回:[]而不是数据。 – Ali 2010-07-16 02:28:34

+0

继续阅读文档。你得到的那个对象有你从中得到的属性(a)得到它的孩子和(b)获得数据。 – 2010-07-16 15:22:55