【问题标题】:Parsing XML response of bit.ly解析 bit.ly 的 XML 响应
【发布时间】:2010-07-16 01:42:56
【问题描述】:

我正在尝试使用 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)

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

【问题讨论】:

  • IOError: [Errno 2] 没有这样的文件或目录 parse() 认为 the_page 是一个文件。我如何让它从 varaibale the_page 中读取

标签: python xml parsing bit.ly


【解决方案1】:

您没有提供错误消息,所以我不能确定这是唯一的错误。但是,xml.minidom.parse 不带字符串。来自parse 的文档字符串:

通过文件名或文件对象将文件解析为 DOM。

你应该试试:

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

因为response 的行为类似于文件对象。或者,您可以改用 minidom 中的 parseString 方法(然后将 the_page 作为参数传递)。

编辑:要提取 URL,您需要这样做:

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

getElementsByTagName 的结果是所有匹配节点的列表(在这种情况下只有一个)。 url 是您注意到的一个元素,它包含一个子文本节点,其中包含您需要的数据。

【讨论】:

  • 这确实解析了 the_page,但我似乎无法获得单独的标签。使用 doc.getElementsByTagName("url") 返回:[] 而不是中间的数据。
  • 更新了我的答案,见上文。
【解决方案2】:
from xml.dom.minidom import parseString
doc = parseString(the_page)

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

【讨论】:

  • 这确实解析了 the_page,但我似乎无法获得单独的标签。使用 doc..getElementsByTagName("url") 返回:[] 而不是数据。
  • 继续阅读文档。您要取回的对象具有属性,您可以从中获取 (a) 获取其子对象和 (b) 获取数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2016-09-03
相关资源
最近更新 更多