【问题标题】:Python parsing xml directly from web addressPython直接从网址解析xml
【发布时间】:2011-07-17 18:44:44
【问题描述】:

嘿。我试图找到一种方法,但我做不到。我已经在 python 中设置了一个 xml.sax 解析器,当我读取本地文件(例如 calendar.xml)时它可以完美运行,但我需要从网址读取 xml 文件。

我认为如果我这样做会起作用:

toursxml='http://api.songkick.com/api/3.0/artists/mbid:'+mbid+'/calendar.xml?apikey=---------'
toursurl=urllib2.urlopen(toursxml)
toursurl=toursurl.read()
parser.parse(toursurl)

但事实并非如此。我确定有一个简单的方法,但我找不到它。

所以是的,我可以轻松地转到网址并下载文件并通过以下方式打开它

parser.parse("calendar.xml")

作为一种解决方法,我将其设置为读取文件并在本地创建文件,关闭文件,然后读取它。但是你可以猜到它慢得要命。

有没有人可以直接读取xml?另请注意,网址名称不以“.xml”结尾,因此以后可能会出现问题

【问题讨论】:

  • 首先,请尽量准确一点:在适当的地方使用大写字母。另外,请非常非常仔细地阅读 API 文档。

标签: python xml parsing urllib


【解决方案1】:
parser.parse(xyz)

期望 xyz 是一个文件;你正在寻找

parser.parseString(xyz)

它期望 xyz 是一个包含 XML 的字符串。

【讨论】:

    【解决方案2】:

    首先,您的示例混淆了。请不要重复使用变量。

    toursurl= urllib2.urlopen(toursxml)
    toursurl_string= toursurl.read()
    parser.parseString( toursurl_string )
    

    将整个文件读入一个字符串,命名为toursurl_string

    要解析字符串,请使用parseString(toursurl_string) 方法。

    http://docs.python.org/library/xml.sax.html#xml.sax.parseString

    如果你想结合读取和解析,你必须传递“流”或文件名来解析。

    toursurl= urllib2.urlopen(toursxml)
    parser.parse(toursurl)
    

    【讨论】:

    • 有没有办法从 http 流中解析而不会在内存中有一个巨大的字符串?
    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 2014-05-12
    • 2012-02-12
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多